mongoDB根据一个条件查找文档,该条件的值来自另一个集合的链接文档

mongoDB根据一个条件查找文档,该条件的值来自另一个集合的链接文档,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有以下结构的集合: 对象: [{"type": "someTypeOne", "menuId": 1}, {"type": "someTypeTwo", "menuId": 1}, {"type": "someTypeOne", "menuId": 2}] [{"id":1, "type": "someTypeOne"}, {"id":2, "type": "someTypeOne"}] 菜单: [{"type": "someTypeOne", "menuId": 1}, {"type":

我有以下结构的集合:

对象:

[{"type": "someTypeOne", "menuId": 1},
{"type": "someTypeTwo", "menuId": 1},
{"type": "someTypeOne", "menuId": 2}]
[{"id":1, "type": "someTypeOne"},
{"id":2, "type": "someTypeOne"}]
菜单:

[{"type": "someTypeOne", "menuId": 1},
{"type": "someTypeTwo", "menuId": 1},
{"type": "someTypeOne", "menuId": 2}]
[{"id":1, "type": "someTypeOne"},
{"id":2, "type": "someTypeOne"}]
我需要找到“type”属性与其菜单“type”不匹配的所有对象。在这种情况下,所需输出为:

[{"type": "someTypeTwo", "menuId": 1}]
我认为我应该在这个问题上使用聚合,目前我正在处理它,但到目前为止我还不能制定一个有效的查询。
谢谢

您可以尝试以下聚合:

db.objects.aggregate([
    {
        $lookup: {
            from: "menus",
            localField: "menuId",
            foreignField: "id",
            as: "menu"
        }
    },
    {
        $unwind: "$menu"
    },
    {
        $match: {
            $expr: {
                $ne: [ "$menu.type", "$type" ]
            }
        }
    },
    {
        $project: {
            menu: 0
        }
    }
])
允许您从两个集合中获取数据,然后您可以在
菜单
数组上运行,以获取每个文档的单个菜单,并且您可以使用和应用不平等条件


@FIIFE因为当你清楚地定义你需要什么时(通过示例),回答起来非常容易