MongoDB聚合以用实际文档替换ObjectId数组

时间:2020-06-26 21:16:51

标签: mongodb aggregation-framework

假设我们有一个带有一个文档的db.orders文档集合:

{"_id": "5ef62e0c586c78491530e4d5", "items": [{ "description": "desc1", "parts": ["5ef62e0c586c78491530e4d7", "5ef62e0c586c78491530e4d8"] } ], "createdBy": "userId"}

[更正:items字段现在是一个数组]

另一个带有两个部分文档的db.parts集合:

{"_id": "5ef62e0c586c78491530e4d7", "name": "part1" }
{"_id": "5ef62e0c586c78491530e4d8", "name": "part2" }

我想在第一个集合上构建一个聚合,用实际的文档替换parts数组中的ObjectId。结果应为:

{"_id": "5ef62e0c586c78491530e4d5", "items": [{ "description": "desc1", "parts":
  [
    {"_id": "5ef62e0c586c78491530e4d7", "name": "part1" },
    {"_id": "5ef62e0c586c78491530e4d8", "name": "part2" }
  ]
}], "createdBy": "userId"}

任何想法将不胜感激!

1 个答案:

答案 0 :(得分:1)

您需要使用$lookup运算符:

    SELECT p.pid, p.name, c.name, c_2.name
FROM product p
    JOIN productcategory pc on p.pid = pc.pid
        JOIN kategorie c on pc.kid = c.kid
    JOIN productcategory pc_2 on p.pid = pc_2.pid
        JOIN kategorie c_2 on pc_2.kid = c_2.kid
WHERE p.name LIKE '%table%' OR p.name LIKE '%chair%'
AND c.kid < c_2.kid;

MongoPlayground