【问题标题】:only return document _id on mongoose .find()仅在 mongoose .find() 上返回文档 _id
【发布时间】:2018-02-27 07:22:49
【问题描述】:

我通过将新数据推送到文档中的数组来每秒更新 100 个文档。为了获取我要添加数据的文档,我使用猫鼬.find().limit(1) 函数,并返回整个文档。它工作正常。

为了帮助解决我遇到的一些内存和 cpu 问题,我想知道如何让 find() 只返回文档的 id,以便我可以使用它来 $push 或 $set 新数据。

谢谢。

【问题讨论】:

  • find函数的第二个参数是一个字符串,指定包含或排除哪些文档字段。要仅包含 _id,请使用 collection.find({}, '_id')

标签: javascript node.js mongodb mongoose


【解决方案1】:

您想使用Projection 准确地告诉您的查询您想要从您的对象中得到什么。

_id 始终包含在内,除非您告诉它不要这样做。

readings = await collection
.find({
    name: "Some name you want"
})
.project({
    _id: 1 // By default
})
.toArray();

【讨论】:

  • collection.find({}, '_id') 还不够吗?
  • @alexmac 我认为这也可以(虽然第二个参数可能需要是一个对象),但我喜欢.project(),因为它更明确。
  • 有没有办法返回文档中数组的id和长度(只有长度)?还是在这种情况下我最好退回整个文档?
  • @Manu 长度是多少?单个文档上的数组属性?我不确定。
  • @alexmac 你知道这两种形式之间是否存在性能差异吗?
【解决方案2】:

您可以使用distinct 方法为您的查询获取_id 数组。

关注this question

【讨论】:

    【解决方案3】:

    正如@alexmac 所说,这对我有用:

    collection.find({}, '_id')
    

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 2020-05-13
      • 2020-09-12
      • 2023-03-20
      • 2020-03-14
      • 2018-10-01
      • 2020-01-20
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多