$ lookup聚合中的$ project

时间:2018-08-23 00:28:49

标签: node.js mongodb mongoose aggregation-framework

所以我有以下文件

{
    "_id": "5b7dfee3130dd4ff45288882",
    "name": "test",
    ...
    "list": {
        "_id": "5b7dfee2130dd4ff45288875",
        "name": "test"
        ...
    }
}

鉴于list是通过{创建的,因此,我应该如何投影所有主文档的字段,而仅投影_id的{​​{1}}和name {1}} + list

lookup

2 个答案:

答案 0 :(得分:2)

主要挑战是您要主文档中的所有字段(因为您不知道所有字段)加上列表中的2个字段。

这应该做到:

account = await result.Content.ReadAsAsync<cuentaM>();

它经历了几个阶段,但完成了工作:)。它将使用当前文档以及仅所需的列表字段。然后它将从当前文档中删除其列表。然后,它将添加到同一文档列表(因为其中包含我们想要的特定字段)。然后它将这些字段添加到文档中,最后将根替换为该文档。

See it here working

答案 1 :(得分:2)

使用mongodb 3.6版$lookup聚合,这非常简单,您可以在pipeline内使用$project

db.collection.aggregate([
  { "$lookup": {
    "from": "lists",
    "let": { "list": "$list" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$_id", "list" ] } } },
      { "$project": { "name": 1 }}
    ],
    "as": "list"
  }},
  { "$unwind": "$list" }
])