【发布时间】:2015-10-13 11:56:46
【问题描述】:
我有一个 MongoDB 集合 world,其中包含以下格式的文档:
{
_id : ObjectId("4e8ae86d08101908e1000001"),
country : [
{
state: "Newyork",
type: 1
},
{
state: "California",
type: 1
},
{
state: "Texas",
type: 2
}
]
}
我们可以很容易地得到数组中有四个或更多状态的文档:
db.world.find({'country.4': {$exists: true} })
但是我怎样才能获得具有四个或更多type: 1 状态的国家/地区数组的文档?
另外,我想避免在查询中使用$where 运算符。
编辑 1
Blakes Seven 的回答对我来说似乎是正确的,但是当我尝试做相反的事情时,即;获取 less 的文档比 n 个字段,然后我得到错误的结果:
这里是查询:
db.world.aggregate([
{ "$redact": {
"$cond": {
"if": {
"$lte": [
{ "$size": { "$setDifference": [
{ "$map": {
"input": "$country",
"as": "el",
"in": {
"$cond": {
"if": { "$eq": [ "$$el.type", 769 ] },
"then": "$$el",
"else": false
}
}
}},
[false]
]}},
4
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
]);
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework