我应该如何引用另一个集合中的集合,一个唯一的用户名或默认的_id(对象ID)或一个在插入新记录时递增的普通id。我读到对象id增加了mongoose的性能,但我无法使用_ids检索记录作为其给出错误INVALID OBJECT ID。使用其他密钥(如用户名)检索时,我没有收到错误。但随着_id提高性能我试图使用它。
Model.find({_id : "idstring"})
我在定义架构时尝试了这两种方法,
1)没有_id的定义,因为它会自动创建
2)我将_id定义为:_id:{type:Schema.ObjectId}
在两种方式中,我在检索记录时收到错误“无效对象ID”
感谢
答案 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,因此无需手动完成。