使用聚合框架复制和过滤数组(提取数组元素)

时间:2016-01-18 16:13:24

标签: mongodb mongodb-query aggregation-framework

我正在使用MongoDB 3.2

我有一个带有嵌入式数组的文档,我想要提取单个元素并保留整个文档的其余部分。

我的文件:

{
  _id: 1,
  items: [
    {
      type: "A",
      id: 41
    },
    {
      type: "A",
      id: 42
    },
    {
      type: "B",
      id: 43
    },
    ...
  ]
}

现在我想要一些查询来执行以下操作:

  1. 使用_id=1
  2. 查找文档
  3. 获取items数组,找到type=A AND id=42的所有元素。然后将这些元素放在machtingItems数组中。
  4. 切片items数组,因此它包含最大值。 2个元素
  5. 结果应该是这样的:

    {
      _id: 1,
      items: [
        {
          type: "A",
          id: 41
        },
        {
          type: "A",
          id: 42
        }
      ],
      matchingItems: [
        {
          type: "A",
          id: 42
        }
      ]
    }
    

    基本上应该只有一个元素匹配type=A and id=42,但在查看聚合框架后,可能更容易使用matchingItems的数组而不是简单的字段。

    我知道如何$match整个文档以及如何$slice数组。但我无法弄清楚如何从数组中提取单个元素并将其放在另一个字段中。 (第2步)

    提前致谢!

0 个答案:

没有答案