当使用Model.findOne()方法时,我可以选择包含一个字符串,将我的返回值限制为那些字段,但是当我尝试使用findById方法时,它似乎无法解决。
以下示例是一个人为的例子。我使用的是真正的_id,它在使用第一个示例时有效,但我只想使用findById方法,因为我心中的一个小声音告诉我速度更快(也许)。
示例:
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))
答案 0 :(得分:1)
打开Mongoose的登录。你会发现这两个电话之间的唯一区别是从 findById 到 findOne 的额外函数调用。
源代码参考:findById(由MikaS提供)
答案 1 :(得分:0)
我不确定,但我认为您需要在查询中和投影中写{}:
此:
PersonModel.findById(Joe._id, 'name age')
应该是这样
PersonModel.findById({idValueToFind}, {name:1, age:1, _id:0})