MongoDB:查找-具有相同字段的集合

时间:2019-02-26 15:08:27

标签: mongodb mongodb-query aggregation-framework

我有两个收藏集UsersNotes。这两个集合都包含一个id属性,而Notes集合具有一个userid,这是Users集合中某些用户的ID。

现在,我正在尝试将一些用户信息汇总(加入)到Notes中:

db.getCollection("Notes").aggregate(
{
    "$lookup": {
        "from": "Users",
        "let": {
            "idForeignField": "$id"
        },
        "pipeline": [
                            {
            "$match": {
                "$expr": {
                    "$and": [{
                        "$eq": ["$userid", "$$idForeignField"]
                    }]
                }
            }
                            }
        ],
        "as": "Users#joined"
    }
}
);

我在空Users#joined数组中得到的内容。为什么?我的查询不应该工作吗?这是由于两个集合都具有id属性这一事实引起的吗?如果是,我该如何告诉letmatch什么是正确的收藏品?

更新:或者更简单的查询也可以:

db.getCollection("Notes").aggregate(
{
   $lookup:
     {
       from: "Users",
       localField: "userid",
       foreignField: "id",
       as: "Users#joined"
     }
}
);

但是我想使用let和管道来添加更多match条件。

谢谢。

1 个答案:

答案 0 :(得分:0)

您的let变量必须为userid

db.getCollection("Notes").aggregate([
  { "$lookup": {
    "from": "Users",
    "let": { "ifForeignField": "$userid" },
    "pipeline": [
      { "$match": { "$expr": { "$and": [{ "$eq": ["$id", "$$ifForeignField"] }] }}}
    ],
    "as": "Users#joined"
  }}
])