【问题标题】:Get precise subdocuments in document array mongoose在文档数组猫鼬中获取精确的子文档
【发布时间】:2019-10-06 04:42:23
【问题描述】:

我正在开发一个使用 mongoose 与我的 mongo 数据库交互的 graphql API,但我正在努力解决一些问题。我有带有子文档数组的文档,我需要获取包含具有特定字段值的子文档的所有文档。问题是我只想在文档中获取这个子文档。用一个例子更容易解释:

我的文件是这样的:

documents: [
{
  id: 1,
  items: [
    {
      value: 5,
    },
    {
      value: 10,
    },
  ]
},
{
  id: 2,
  items: [
    {
      value: 7,
    },
    {
      value: 10,
    },
  ]
}]

我想获取所有包含value == 5 项目但仅包含此值的文档,例如:

results : [
{
  id: 1,
  items: [
    {
      value: 5,
    }
  ]
}]

我现在要做的是:

documents.find({
  items: {
    $elemMatch : {
      value: { $eq: 5 }
    }
  },
});

这样做我得到了正确的文档,但它包含所有项目,而不仅仅是符合条件的项目。我寻找解决方案,但没有找到任何方法。

感谢您的帮助,我希望它足够清楚。

【问题讨论】:

    标签: javascript node.js database mongoose


    【解决方案1】:

    您需要指定要从查询中返回的字段。

    documents.find({
        items: {
          $elemMatch : {
            value: { $eq: 5 }
          }
        },
      }, {requiredFields: 1});
    

    请参阅this 问题中的示例。

    官方文档:here - 搜索“select”

    如果你也需要过滤掉结果,你可以使用$filter

    【讨论】:

      【解决方案2】:

      您需要按如下方式使用聚合框架:

      db.test.aggregate(
      { $match: { "id": 1 }}, 
      { $unwind: '$items' }, 
      { $match: { "items.value": 5 }},
      { $project: { "_id": 0 }}
      )
      

      返回值:

      { "id" : 1, "items" : { "value" : 5 } }
      

      【讨论】:

        猜你喜欢
        • 2018-06-01
        • 2022-12-23
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 2019-08-09
        • 1970-01-01
        相关资源
        最近更新 更多