Node.js 使用_id引用时,哪一个对性能最好?在使用_id检索时,我得到了错误的无效对象id

Node.js 使用_id引用时,哪一个对性能最好?在使用_id检索时,我得到了错误的无效对象id,node.js,mongodb,mongoose,object-identity,Node.js,Mongodb,Mongoose,Object Identity,如何引用另一个集合中的集合、唯一用户名或默认id(对象id)或插入新记录时递增的普通id。我了解到对象ID提高了mongoose中的性能,但我无法使用_ID作为其给定错误检索记录无效的对象ID。使用其他键(如用户名)检索时,我没有遇到错误。但随着id性能的提高,我正在尝试使用它 Model.find({_id : "idstring"}) 我在定义模式时尝试了这两种方法 1) 没有_id的定义,因为它将自动创建 2) 我这样定义了_id:_id:{type:Schema.ObjectId}

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

  Model.find({_id : "idstring"})
我在定义模式时尝试了这两种方法

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

2) 我这样定义了_id:_id:{type:Schema.ObjectId}

在这两种情况下,检索记录时都会出现错误“无效对象id”


谢谢

您需要从字符串创建ObjectID

 var ObjectId = require('mongoose').Types.ObjectId;
 var myObjectId = ObjectId.fromString('myhexstring');
1)和2)都做同样的事情。最好选择猫鼬帮你做

我对表演一无所知。mongodb只为您唯一地索引了_id字段,因此查询中的性能提高就是由于这个原因。如果查询速度较慢,则始终可以为任何其他字段编制索引。当然,它更容易使用

无效的对象ID错误是由于mongoose无法将传递的内容转换为ObjectId。您可以传递十六进制字符串或mongoose.Types.ObjectId的实例。十六进制字符串的长度应为24个字符。再次检查此值


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

我的工作因此停止,请有人回答此问题。谢谢