在文档阵列猫绿色中获取精确的细分



我正在使用mongoose开发一个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 }
    }
  },
});

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

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

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

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

返回值:

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

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

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

参见此问题中的示例。

官方文档:此处 - 搜索"选择"

如果您也需要过滤结果,则使用$ filter

最新更新