【问题标题】:Return specified field using findById | Mongoose MongoDB使用 findById 返回指定字段 |猫鼬 MongoDB
【发布时间】: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。
  • 你是绝对正确的,这正在工作。昨晚一定是有其他东西影响了代码。如果您将此添加为答案,我会将您标记为正确答案。
  • 很高兴听到它正在工作。不可重现的问题不应该真正得到回答,所以我认为我的评论就足够了。无论如何,谢谢。

标签: mongodb mongoose


【解决方案1】:

打开 Mongoose 的登录功能。您会发现这两个调用之间的唯一区别是从 findByIdfindOne 的额外函数调用。

源码参考:findById(MikaS提供)

【讨论】:

    【解决方案2】:

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

    这个:

    PersonModel.findById(Joe._id, 'name age')
    

    应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2019-02-08
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      相关资源
      最近更新 更多