我将很多聚合管道保存到一个集合中:
{
"_id" : ObjectId("56d06614070b7f2b117b23db"),
"ops" : [
{
"$unwind" : "$x"
},
{
"$unwind" : "$y"
},
{
"$match" : {
"brand" : "z"
}
}
]
}
我想对这些数据做一些统计:
db.apicalls.aggregate([{"$unwind":"$ops"},{"$match":{***...***}}])
单独展开操作的结果如下:
{ "_id" : ObjectId("56d06631070b7f11117b23d4"), "ops" : { "$match" : { "brand" : "zzz" } } },
{ "_id" : ObjectId("56d06631070b7f11117b23d4"), "ops" : { "$unwind" : "$x" } }
我希望只能匹配保存到集合中的$ match操作。 有人有如何选择键#34; $ match" ?
由于
答案 0 :(得分:1)
您的问题具有误导性。由于$
字符作为MongoDB文档中的属性名称是“非法”的,因此它们实际上将被“转义”为“斜杠”\
:
{
"_id" : ObjectId("56d06614070b7f2b117b23db"),
"ops" : [
{
"\$unwind" : "$x"
},
{
"\$unwind" : "$y"
},
{
"\$match" : {
"brand" : "z"
}
}
]
}
因此,您需要在关键字中包含所有字符,以便使用$exists
运算符查找\$match
:
db.apicalls.aggregate([
{ "$unwind": "$ops" },
{ "$match": {
"ops.\\$match": { "$exists": true }
}}
])
返回正确的文档:
{ "_id" : ObjectId("56d06614070b7f2b117b23db"), "ops" : { "\$match" : { "brand" : "z" } } }