1

我应该如何引用另一个集合中的集合,唯一的用户名或默认 _id(对象 id)或插入新记录时递增的普通 id。我读到对象 ids 提高了 mongoose 的性能,但我无法使用 _ids 检索记录作为它给出的错误 INVALID OBJECT ID 。使用其他键(如用户名)检索时我没有收到错误。但随着 _id 提高性能,我正在尝试使用它。

  Model.find({_id : "idstring"})

我在定义模式时尝试了这两种方法,

1) _id 没有定义,因为它会自动创建

2)我这样定义_id:_id:{类型:Schema.ObjectId}

在这两种方式中,我在检索记录时都收到错误“无效的对象 ID”

谢谢

4

2 回答 2

2

您需要从字符串创建一个 ObjectID

 var ObjectId = require('mongoose').Types.ObjectId;
 var myObjectId = ObjectId.fromString('myhexstring');
于 2012-04-17T07:58:10.993 回答
0

1) 和 2) 都做同样的事情。最好选择 1) 并让猫鼬为你做这件事。

我不知道性能必然。_id 字段只是由 mongodb 为您唯一索引,因此查询中的性能增益将由此产生。如果您的查询很慢,您可以随时索引您想要的任何其他字段。_id 肯定更容易使用。

INVALID OBJECT ID 错误是由于传递的东西不能被猫鼬转换为 ObjectId。您可以传递十六进制字符串或 mongoose.Types.ObjectId 的实例。十六进制字符串的长度应为 24 个字符。仔细检查这个值。

此外,为您完成了将字符串显式转换为 ObjectId 的操作,因此无需手动进行。

于 2012-04-18T00:06:27.303 回答