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因为当你清楚地定义你需要什么时(通过示例),回答起来非常容易