【发布时间】:2023-03-20 10:15:01
【问题描述】:
当使用 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))
【问题讨论】:
-
findById 调用 findOne,所以它不能更快。来源是here。投影也适用于 findById。
-
你是绝对正确的,这正在工作。昨晚一定是有其他东西影响了代码。如果您将此添加为答案,我会将您标记为正确答案。
-
很高兴听到它正在工作。不可重现的问题不应该真正得到回答,所以我认为我的评论就足够了。无论如何,谢谢。