使用findById | Mongoose MongoDB返回指定字段
当使用Model.findOne()方法时,我可以选择包含一个字符串,该字符串将返回值限制为仅包含这些字段,但是当我尝试使用findById方法时,它似乎不起作用 下面的例子是一个人为的例子。我使用的是一个真实的_id,在使用第一个示例时,它是有效的,但我只想使用findById方法,因为我脑海中有一个微小的声音告诉我这更快(可能更快) 例如:使用findById | Mongoose MongoDB返回指定字段,mongodb,mongoose,Mongodb,Mongoose,当使用Model.findOne()方法时,我可以选择包含一个字符串,该字符串将返回值限制为仅包含这些字段,但是当我尝试使用findById方法时,它似乎不起作用 下面的例子是一个人为的例子。我使用的是一个真实的_id,在使用第一个示例时,它是有效的,但我只想使用findById方法,因为我脑海中有一个微小的声音告诉我这更快(可能更快) 例如: let Joe = new PersonModel({ _id: ObjectId("12345") name: 'Joe', age: 3
let Joe = new PersonModel({
_id: ObjectId("12345")
name: 'Joe',
age: 30,
password: 'GreatPW'
}).save();
现在找到乔,只返回他的姓名和年龄。这管用
PersonModel.findOne({_id: Joe._id}, 'name age')
.then(person => console.log(person))
现在使用findById()执行相同的操作。这对我没用
PersonModel.findById(Joe._id, 'name age')
.then(person => console.log(person))
在Mongoose中打开日志记录。您将看到这两个调用之间的唯一区别是从findById到findOne的额外函数调用
源代码参考:(由MikaS提供)我不确定,但我认为您需要在查询和投影中编写{}: 这: 应该是这样的:
PersonModel.findById({idValueToFind}, {name:1, age:1, _id:0})
findById调用findOne,所以它不能更快。消息来源是。投影应该也适用于findById。你完全正确,现在可以了。昨晚一定是别的什么东西影响了代码。如果你加上这个作为答案,我会标记你的答案是正确的。很高兴听到它起作用了。不可复制的问题实际上不应该得到回答,所以我认为我的评论就足够了。无论如何,谢谢你。
PersonModel.findById({idValueToFind}, {name:1, age:1, _id:0})