Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用findById | Mongoose MongoDB返回指定字段_Mongodb_Mongoose - Fatal编程技术网

使用findById | Mongoose MongoDB返回指定字段

使用findById | Mongoose MongoDB返回指定字段,mongodb,mongoose,Mongodb,Mongoose,当使用Model.findOne()方法时,我可以选择包含一个字符串,该字符串将返回值限制为仅包含这些字段,但是当我尝试使用findById方法时,它似乎不起作用 下面的例子是一个人为的例子。我使用的是一个真实的_id,在使用第一个示例时,它是有效的,但我只想使用findById方法,因为我脑海中有一个微小的声音告诉我这更快(可能更快) 例如: let Joe = new PersonModel({ _id: ObjectId("12345") name: 'Joe', age: 3

当使用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))

在Mongoose中打开日志记录。您将看到这两个调用之间的唯一区别是从findByIdfindOne的额外函数调用


源代码参考:(由MikaS提供)

我不确定,但我认为您需要在查询和投影中编写{}:

这:

应该是这样的:

PersonModel.findById({idValueToFind}, {name:1, age:1, _id:0})

findById调用findOne,所以它不能更快。消息来源是。投影应该也适用于findById。你完全正确,现在可以了。昨晚一定是别的什么东西影响了代码。如果你加上这个作为答案,我会标记你的答案是正确的。很高兴听到它起作用了。不可复制的问题实际上不应该得到回答,所以我认为我的评论就足够了。无论如何,谢谢你。
PersonModel.findById({idValueToFind}, {name:1, age:1, _id:0})