使用MongoDB聚合查询匹配集合中的特定项

使用MongoDB聚合查询匹配集合中的特定项,mongodb,aggregation-framework,Mongodb,Aggregation Framework,在下面的文档中,我想找到列与条件匹配的表对象 (标签为“abc”或(名称为“abc”,标签为空)) 预期的答案是table2对象 下面的查询返回表1和表2。我认为'match'子句应用于整个列数组,而不是逐列应用。我希望得到表对象作为最终结果,因此在列级别展开不是一个选项 db.getCollection('test').aggregate( {$unwind : "$tables"}, {"$match": {"$

在下面的文档中,我想找到列与条件匹配的表对象

(标签为“abc”或(名称为“abc”,标签为空))

预期的答案是table2对象

下面的查询返回表1和表2。我认为'match'子句应用于整个列数组,而不是逐列应用。我希望得到表对象作为最终结果,因此在列级别展开不是一个选项

db.getCollection('test').aggregate(
            {$unwind : "$tables"},
            {"$match":
                {"$or": 
                    [
                        {"tables.columns.label": "abc"},
                        {"tables.columns.name":"abc", "tables.columns.label": ""}
                    ]
                }
            }
)
如何逐列匹配?

您应该使用运算符:

db.getCollection('test').aggregate(
{
$unwind:“$tables”
},
{
$match:
{
“$or”:
[
{
“表.列.标签”:“abc”
},
{
“表.列”:
{
$elemMatch:
{
“名称”:“abc”,
“标签”:”
}
}
}
]
}
}
)
db.getCollection('test').aggregate(
            {$unwind : "$tables"},
            {"$match":
                {"$or": 
                    [
                        {"tables.columns.label": "abc"},
                        {"tables.columns.name":"abc", "tables.columns.label": ""}
                    ]
                }
            }
)