首页 > 解决方案 > MongoDB:查找 - 具有相同字段的集合

问题描述

我有两个系列UsersNotes. 两个集合都包含一个id属性,并且Notes集合有一个userid是集合上某个用户的 id Users

现在,我正在尝试将一些用户信息聚合(加入)到Notes

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

我在一个空Users#joined数组中得到什么。为什么?我的查询不应该工作吗?问题是由两个集合都有id属性引起的吗?let如果是,我怎么知道match什么是正确的收藏?

更新:或者一个更简单的查询就可以了:

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

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

谢谢你。

标签: mongodbmongodb-queryaggregation-framework

解决方案


你的let变量必须是userid

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

推荐阅读