MongoDB节点检查objectid是否有效

如何使用Node的驱动程序检查ObjectID是否有效

我试过了 :

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

但是我总是得到一个exception,而不是真或假。 (例外是只是一个'扔e; / / process.nextTick错误,或'错误'事件首先打勾'

不知道isValid()函数来自哪里,但不在node-mongodb-native中 。

如果要检查24个hex字符的string,可以使用此正则expression式。

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

取自github.com/mongodb/js-bson/…/objectid.js

isValid()位于js-bson库中,它是node-mongodb-native的依赖项。

对于谁发现这个问题,我不build议重新创build这个方法作为其他答案的build议。 相反,继续使用像原始海报使用的节点mongodb本地,下面的示例将访问js-bson中的isValid()方法。

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

@GianPaJ的代码片段很棒,但是它需要稍微扩展来覆盖非hex对象ID。 同一个文件的第32行表示objectID的长度也可以是12个字符。 这些键由mongodb驱动程序转换为24个字符的hexObjectID。

 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; } 

作为Joes的Eat的延伸回答…这在node-mongodb-native 2.0中是有效的

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

我已经向js-bson库提交了一个pull请求,该库提供了一个isValid方法,因为检查objectidstring的逻辑已经在那里了。

您可以使用Cerberus并创build一个自定义函数来validation和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'