我有一个类似以下的文档集合:
{
"_id": ObjectId("xxxxx"),
"item": [
{ "property": ["attr1", "+1"] },
{ "property": ["attr2", "-1"] }
]
}
{
"_id": ObjectId("xxxxy"),
"item": [
{ "property": ["attr1", "-1"] },
{ "property": ["attr2", "0"] }
]
}
{
"_id": ObjectId("xxxxz"),
"item": [
{ "property": ["attr1", "0"] },
{ "property": ["attr2", "+1"] }
]
}
最好使用聚合管道,有没有办法匹配文档当且仅当任何一个属性符合多个条件时?
例如,我想查询一个对象在数组中同时满足这两个条件的情况:("item.property": "attr1") AND ("item.property": /^\+/)
也就是说,一个属性包含“attr1”和以“+”开头的元素。
然而,使用我的当前查询,看起来像这样:
collection.aggregate(
{ $match:
{ $and:
[
{ "item.property": "attr1" },
{ "item.property": /^\+/ }
]
}
}
这将匹配第一个和最后一个文档,因为两者都包含具有“attr1”的属性和以“+”开头的元素。但是,我不希望此查询匹配最后一个文档,因为以“+”开头的元素不属于数组中相同的对象。
是否有任何方法可以使用聚合框架实现此行为?