我们可以在同一条语句中同时使用$group和$or进行聚合吗?
query = [{'$group': { '$or': [{'_id' : "$birthYear", 'count': { '$sum': 1 }}] }}]
by_date = list(mycol.aggregate(query))
这给了我以下错误。
pymongo.errors.OperationFailure: The field '$or' must be an accumulator object
以下是我的MongoDB示例。
db.employee.insert([
{"id":"1","name": "Ricardo Carpio","age": 24, "gender": "Male", "birthYear" : "1995" , "hobby" : "Reading books"},
{"id":"2","name": "Alice Salpicao","age": 27, "gender": "Female", "birthYear" : "1992" , "hobby" : "Eating"},
{"id":"3","name": "Cardo Agustin","age": 25, "gender": "Male", "birthYear" : "1996" , "hobby" : "Jogging"},
{"id":"5","name": "Gamora Yuchi","age": 24, "gender": "Female", "birthYear" : "1995" , "hobby" : "Singing"},
{"id":"6","name": "Thanos Pink","age": 29, "gender": "Male", "birthYear" : "1990" , "hobby" : "Collecting gems"}
])
我试图用下面的语句对计数进行分组。
db.collection.aggregate([
{
"$group": {
"_id": "$birthYear",
"count": {
"$sum": 1
}
}
}
])
这很好用。
但是,我需要添加一个基于字段的条件式搜索,其中的 hobby is Eating
使用 "$or": [hobby: "Eating"]
不清楚你想做什么,但无论如何答案都不会改变。
所以... $组 可以接收2个字段。_id
是必须的,必须是某种常量,以及任何用 蓄能器运算符.
所以... $or
不是累加器运算符,这意味着我们只能把它作为一个常数来使用。_id
领域。
它看起来像这样。
db.collection.aggregate([
{
$group: {
_id: {$or: [cond1, cond2, ...]},
field: ... accumulator op ...
}
}
])
这将产生以下结果:
[
{ // matched true with the $or condition
_id: true,
field: [ ... ]
},
{ // matched false with the $or condition
_id: false,
field: [ ... ]
}
]
没有其他最高级别的用法 $or
是可以的。