说我在MongoDB中有这样的文档
{
"mylist":[
{"value": 1},
{"value": 2},
{"value": 3}
]
},
{
"mylist":[
{"value": 1},
{"value": 2},
{"value": 1}
]
}
如何在列表中多次查询{"value": 1}
次文件(即后者)?
答案 0 :(得分:2)
使用$where
进行JavaScript评估时可能最好处理:
db.colletion.find({
"$where": function() {
return this.mylist.filter(function(el) {
return el.value == 1;
}).length >= 1;
}
})
目前在汇总方面没有那么大的处理:
db.collection.aggregate([
{ "$redact": {
"if": { "$eq": [ { "$ifNull": [ "$value", 1 ] }, 1 },
"then": "$$DESCEND",
"else": "$$PRUNE"
}},
{ "$redact": {
"if": { "$gt": [{ "$size": "$mylist" }, 1 ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}}
])
或者$filter
:
db.collection.aggregate([
{ "$redact": {
"if": {
"$gt": [
{ "$size": { "$filter": {
"input": "$mylist",
"as": "el",
"cond": {
"$eq": [ "$$el.value", 1 ]
}
}}},
1
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}}
])
在MongoDB的下一个版本发布之前,后一个运算符尚未可用。但总的来说,你希望能够过滤掉" count"比赛的发生。这有几种方法可以做到这一点。
答案 1 :(得分:0)
您可以使用聚合管道 - 我建议展开数组,然后按原始文档和值进行分组,然后过滤以仅保留那些计数大于1的结果。