Comprobación de nodo MongoDB si objectid es válido

¿Cómo puedo verificar si un ObjectID es válido usando el controlador de Node?

Lo intenté :

var BSON = mongo.BSONPure; console.log("Validity: " + BSON.ObjectID.isValid('ddsd')) 

Pero sigo obteniendo una excepción en lugar de una verdadera o falsa. (La excepción es simplemente un error ‘throw e; // process.nextTick’ o ‘error’ al primer tic ‘

No estoy seguro de dónde viene la función isValid() , pero no está en node-mongodb-native .

Puede usar esta expresión regular si desea verificar una cadena de 24 caracteres hexadecimales.

 var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); 

Tomado de github.com/mongodb/js-bson/…/objectid.js

isValid() está en la biblioteca js-bson , que es una dependencia de node-mongodb-native .

Para quien encuentre esta pregunta, no recomiendo volver a crear este método como se recomienda en otras respuestas. En cambio, continúe usando node-mongodb-native como lo estaba utilizando el póster original, el siguiente ejemplo accederá al método isValid() en js-bson.

 var mongodb = require("mongodb"), objectid = mongodb.BSONPure.ObjectID; console.log(objectid.isValid('53fbf4615c3b9f41c381b6a3')); 

Actualización de julio de 2018: la forma actual de hacerlo es:

 var mongodb = require("mongodb") console.log(mongodb.ObjectID.isValid(id)) 

Como una extensión de Eat at Joes, responde … Esto es válido en node-mongodb-native 2.0

 var objectID = require('mongodb').ObjectID objectID.isValid('54edb381a13ec9142b9bb3537') - false objectID.isValid('54edb381a13ec9142b9bb353') - true objectID.isValid('54edb381a13ec9142b9bb35') - false 

El fragmento de @GianPaJ es genial, pero debe ampliarse ligeramente para cubrir los objectID no hexadecimales. La línea 32 del mismo archivo indica que ID de objeto también puede tener 12 caracteres de longitud. Estas claves se convierten en un ObjectID hexadecimal de 24 caracteres por el controlador mongodb.

 function isValidObjectID(str) { // coerce to string so the function can be generically used to test both strings and native objectIds created by the driver str = str + ''; var len = str.length, valid = false; if (len == 12 || len == 24) { valid = /^[0-9a-fA-F]+$/.test(str); } return valid; } 

He enviado una solicitud de extracción a la biblioteca js-bson que expone un método isValid, ya que la lógica para verificar la cadena objectid ya estaba allí.

Puede usar Cerberus y crear una función personalizada para validar y ObjectId

 from cerberus import Validator import re class CustomValidator(Validator): def _validate_type_objectid(self, field, value): """ Validation for `objectid` schema attribute. :param field: field name. :param value: field value. """ if not re.match('[a-f0-9]{24}', str(value)): self._error(field, ERROR_BAD_TYPE % 'ObjectId') ## Initiate the class and validate the information v = CustomValidator() schema = { 'value': {'type': 'objectid'} } document = { 'value': ObjectId('5565d8adba02d54a4a78be95') } if not v(document, schema): print 'Error'