MongoDB节点检查objectid是否有效

Aks*_*hat 47 mongodb node.js

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

我试过了 :

var BSON = mongo.BSONPure;
console.log("Validity: "  + BSON.ObjectID.isValid('ddsd'))
Run Code Online (Sandbox Code Playgroud)

但我一直得到一个例外而不是真或假.(例外情况只是'抛出e; // process.nextTick错误,或'首次打勾'错误'事件'

Gia*_* P. 72

不确定isValid()函数的来源,但它不在node-mongodb-native中.

如果要检查24个十六进制字符的字符串,可以使用此正则表达式.

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

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

  • 仅供参考:截至2014年1月17日``Object.isValid()`已经实施,[commit`821bed15727015ca36a585778e739c9469ae2ec4`](https://github.com/mongodb/js-bson/commit/821bed15727015ca36a585778e739c9469ae2ec4#diff-3c6e907061285ee033834c05c718dd84)我可以似乎在JIRA中发现了有关提交821bed1的任何内容,但我猜这包含在mongodb v2.6版本更新中(node-mongodb-native 1.4).*编辑:@Mandy的回答实际上是关于这个* (8认同)

Eat*_*oes 45

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

对于发现此问题的人,我建议不要在其他答案中重新推荐此方法.而是像原始海报一样继续使用node-mongodb-native,以下示例将访问isValid()js-bson中的方法.

var mongodb = require("mongodb"),
    objectid = mongodb.BSONPure.ObjectID;

console.log(objectid.isValid('53fbf4615c3b9f41c381b6a3'));
Run Code Online (Sandbox Code Playgroud)

2018年7月更新:目前的做法是:

var mongodb = require("mongodb")
console.log(mongodb.ObjectID.isValid(id))
Run Code Online (Sandbox Code Playgroud)

  • @alexserver这是一个有效的id,实际上任何数字都可以.如果你必须验证id是mongo生成的十六进制字符串,那么你可以使用`(new RegExp("^ [0-9a-fA-F] {24} $")).test('53fbf4615c3b9f41c381b6a3')`或者看看在接受的答案. (3认同)
  • 任何 12 个字符的内容都会通过 `m.ObjectID.isValid('#tringI 1234') === true`... (2认同)

Sea*_*ory 16

作为Eat at Joes的延伸答案......这在node-mongodb-native 2.0中有效

var objectID = require('mongodb').ObjectID

objectID.isValid('54edb381a13ec9142b9bb3537') - false
objectID.isValid('54edb381a13ec9142b9bb353') - true
objectID.isValid('54edb381a13ec9142b9bb35') - false
Run Code Online (Sandbox Code Playgroud)


jks*_*dua 9

@ GianPaJ的片段很棒,但需要稍微扩展以覆盖非十六进制的objectID.同一文件的第32行表示objectID的长度也可以是12个字符.这些密钥由mongodb驱动程序转换为24个字符的十六进制ObjectID.

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;
}
Run Code Online (Sandbox Code Playgroud)


arg*_*rgo 9

如果您正在使用,mongoose那么您可以使用 mongoose 进行验证,而不是依赖于任何其他库。

if (!mongoose.Types.ObjectId.isValid(req.id)) {
    return res.status(400).send("Invalid object id");
}
Run Code Online (Sandbox Code Playgroud)

  • “而不是依赖任何其他库”。Mongoose 包含 `node-mongodb-native`,因此该声明是错误的。正如您所知,Mongoose 只是公开了 `node-mongodb-native` 的 isValid 函数... https://github.com/Automattic/mongoose/blob/a057217ba5ef0abd2c030135185f77c04c4d677a/lib/types/objectid.js#L13 (2认同)

Man*_*ndy 8

我已经向js-bson库提交了一个pull-request,它暴露了一个isValid方法,因为检查objectid字符串的逻辑已经在那里了.