代码之家  ›  专栏  ›  技术社区  ›  Raz Buchnik

MongoDB如何从$lookup远程集合中$project(限制字段)?

  •  1
  • Raz Buchnik  · 技术社区  · 7 年前

    我想用$lookup查找一个远程集合,比如sql join,但是使用mongo。我不想把远程文档中的所有密钥都拖到源站集合中——只需要一些特定的密钥。

    这就是我所尝试的:

    [
      {
        $lookup: {
            from: "tables",
            localField: "type",
            foreignField: "_id",
            as: "type"
          }
        },
        {
          $unwind: "$type"
        },
      },
      {
        $project: {
          "type.title": 1
        }
      }
    ]
    

    但是,这只打印“type.title”,并且忽略所有其他键,即使来自原始文档。

    有没有办法告诉MongoDB只从远程集合中提取特定的字段?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ashh    7 年前

    您可以将下面的聚合与MongoDB一起使用 三点六 及以上

    [
      { "$lookup": {
        "from": "tables",
        "let": { "type": "$type" },
        "pipeline": [
          { "$addFields": { "owners": { "$cond": { "if": { "$ne": [ { "$type": "$owners" }, "array" ] }, "then": [], "else": "$owners" } } }},
          { "$match": { "$expr": { "$eq": ["$_id", "$$type"] }}},
          { "$project": { "title": 1 }}
        ],
        "as": "type"
      }},
      { "$unwind": "$type" }
    ]
    
    推荐文章