MongoDB:做一个投影,只返回嵌套到另一个嵌套到对象

时间:2016-12-16 11:41:09

标签: arrays mongodb nested projection

我有以下内容:我需要使用仅返回列表的第一个元素的投影从MongoDB中检索文档。但是,此列表位于另一个列表中,并且此列表位于对象内部,该对象位于文档中的另一个对象内。它看起来如下:

{
  "items": {
    "item": [
      {
        "items": {
          "item": [
            {
              "cell": [
                {
                  "value": "a"
                },
                {
                  "value": "b"
                },
                {
                  "value": "c"
                }
              ]
            }
          ]
        }
      }
    ]
  }
}

我的目标是通过值获取它:“a”使用投影来避免其他值。也就是说,我的预测应该归还:

{
  "items": {
    "item": [
      {
        "items": {
          "item": [
            {
              "cell": [
                {
                  "value": "a"
                }
              ]
            }
          ]
        }
      }
    ]
  }
}

问题是我已经尝试过我所知道的一切:我已经使用了$ elemMatch,$和$ slice来返回这个第一个元素,但由于文档的复杂性,我无法进行查询。我正在使用MongoDB 3.2。

如果您需要更多信息,请在此处更新。无论如何,谢谢大家!

1 个答案:

答案 0 :(得分:1)

您可以尝试以下内容。利用 $map 运算符访问单元格数组,同时保留结构并使用 $slice 选择第一个值。

aggregate({
    $project: {
        items: {
            item: {
                $map: {
                    input: "$items.item",
                    as: "outer",
                    in: {
                        "items": {
                            item: {
                                $map: {
                                    input: "$$outer.items.item",
                                    as: "inner",
                                    in: {
                                        "cell": {
                                            $slice: ["$$inner.cell", 1]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        _id: 0
    }
})