MongoDB(Pymongo)使用$group和$or是同一语句

2024-09-30 18:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我们可以同时使用$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"]


Tags: ornameidagecountgroup语句query
1条回答
网友
1楼 · 发布于 2024-09-30 18:23:21

不清楚你想做什么,但答案不会改变

因此$group可以接收2个字段_id,这是必需的,必须是某种常量和任何用accumulator operators计算的字段名

因此$or不是accumaltor运算符,这意味着我们只能将其用作_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

相关问题 更多 >