¿Cómo verificar si una string es MongoDB ObjectId válida en Node.js?

MongoDB ObjectId: MongoDB crea una identificación única de 12 bytes para cada objeto utilizando la marca de tiempo de la creación del objeto respectivo.
Este ObjectId se puede usar para apuntar de manera única a un objeto específico en la base de datos.

Estructura:

  • Valor de marca de tiempo de 4 bytes
  • Valor aleatorio de 5 bytes
  • Contador incremental de 3 bytes, inicializado a un valor aleatorio

Se ve así, 507f191e810c19729de860ea
Durante un flujo de trabajo de back-end normal, el ObjectId podría recibirse en función de algunos cálculos u operaciones del usuario. Estos pueden dar como resultado un ObjectId no válido y la consulta de la base de datos con un ObjectId incorrecto genera una excepción que luego se maneja más adelante.

En este artículo, aprenderemos cómo comprobar si una string es un ObjectId de MongoDB válido.

Ejemplos:

594ced02ed345b2b049222c5 --> Valid MongoDB ObjectId
geeks --> Invalid MongoDB ObjectId

requisitos previos:

Mongoose y MongoDB proporcionan una función muy útil en ObjectId, es decir , ObjectId.isValid («some_id») para validar una string para la identificación correcta de MongoDB.
ObjectId se puede importar desde mongodb nativo , así como desde el paquete mongoose .
 

Importe ObjectId desde paquetes mongodb o mongoose:

  • Usando Mongodb:
const ObjectId = require('mongodb').ObjectId;
or
const mongodb, {ObjectId} = require('mongodb');

Usando mangosta:

const ObjectId = require('mongoose').Types.ObjectId;
or
const mongoose = require('mongoose');
ObjectId = mongoose.Types.ObjectId;Id;

Sin embargo, ObjectId.isValid(id) devuelve verdadero incluso para strings no válidas con una longitud de 12.
Por ejemplo:

ID de string IdObjeto.isValid(id)            Validación esperada               
594ced02ed345b2b049222c5 verdadero verdadero
frikis falso falso
arribaarribaarribaarriba verdadero     X falso
frikisfogeeks verdadero     X falso

Para evitar tales casos, se puede agregar otra verificación después del validador predeterminado que devolvería verdadero o falso según la condición (nuevo ObjectId creado a partir de una string) convertido a string === string
, es decir, (String) (nuevo ObjectId (id)) = == id
Se puede crear una función de la siguiente manera para verificar si una string es un ObjectId válido o no:

const ObjectId = require('mongoose').Types.ObjectId;
function isValidObjectId(id){
    
    if(ObjectId.isValid(id)){
        if((String)(new ObjectId(id)) === id)
            return true;
        return false;
    }
    return false;
}

Javascript

// Requiring ObjectId from mongoose npm package
const ObjectId = require('mongoose').Types.ObjectId;
 
// Validator function
function isValidObjectId(id){
     
    if(ObjectId.isValid(id)){
        if((String)(new ObjectId(id)) === id)
            return true;       
        return false;
    }
    return false;
}
 
// Loading testcases into array
const testStrings = [ "594ced02ed345b2b049222c5","geeks", 
                      "toptoptoptop","geeksfogeeks"];
 
// Validating each test case
for(const testcase of testStrings){
 
    if(isValidObjectId(testcase))
        console.log(testcase + " is a valid MongodbID");
    else
        console.log(testcase + " is not a valid MongodbID");
 
}

Salida: Los resultados de esta función son:

ID de string esValidObjectId(id)           Validación esperada         
594ced02ed345b2b049222c5 verdadero verdadero
frikis falso falso
arribaarribaarribaarriba falso falso
frikisfogeeks falso falso

Publicación traducida automáticamente

Artículo escrito por omkarphansopkar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *