Mongoose:如何生成有效的mongoose.Types.ObjectId?

时间:2014-11-03 16:08:15

标签: node.js mongodb mongoose

我正在测试一些依赖于Mongoose模型的代码。我想验证函数是否已传递有效的ObjectId作为参数。我已经读过可以使用以下命令创建新的ObjectId对象:

 var id = mongoose.Types.ObjectId();

但是以下内容总是会返回false:

var id = mongoose.Types.ObjectId();
mongoose.Types.ObjectId.isValid(id) //false

这是为什么?是因为我正在创建一个没有密钥的新ObjectId实例吗?通过Mongoose源我可以看到mongoose.Types.ObjectId.isValid实际上是在本机mongo模块中定义的。我会继续深入研究司机,但如果有人能告诉我为什么上述行为正在发生,我会很感激节省时间:p

谢谢!

1 个答案:

答案 0 :(得分:4)

isValid是本机驱动程序中BSON ObjectID类的poorly documented方法。

如果您查看该方法的the source,您会发现它希望传入字符串,因此您需要将其称为:

mongoose.Types.ObjectId.isValid(id.toString())

然而,正如@HMR在评论中指出的那样,isValid的实现有一个奇怪的怪癖,即考虑任何 12个字符的字符串是有效的。请参阅source

不幸的是,使用类似的方法自己实施检查可能更好:

if (id.toString().match(/^[0-9a-fA-F]{24}$/)) {
  // It's a valid ObjectId
}