使用_id引用时哪个性能最佳?在使用_id进行检索时,我收到错误INVALID OBJECT ID

时间:2012-04-17 02:10:03

标签: node.js mongodb mongoose object-identity

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

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

我在定义架构时尝试了这两种方法,

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

2)我将_id定义为:_id:{type:Schema.ObjectId}

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

感谢

2 个答案:

答案 0 :(得分:2)

您需要从字符串

创建ObjectID
 var ObjectId = require('mongoose').Types.ObjectId;
 var myObjectId = ObjectId.fromString('myhexstring');

答案 1 :(得分:0)

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

我绝对不知道表现。 _id字段只能由mongodb为您进行唯一索引,因此查询中的性能增益将归因于此。如果查询速度很慢,您始终可以索引所需的任何其他字段。它更容易使用_id肯定。

INVALID OBJECT ID错误是由于传递的某些内容无法通过mongoose强制转换为ObjectId。您可以传递十六进制字符串或mongoose.Types.ObjectId的实例。十六进制字符串的长度应为24个字符。仔细检查这个值。

另外,显式地将字符串强制转换为ObjectId,因此无需手动完成。