MongoDB(Pymongo)使用$group和$or是一样的语句。

问题描述 投票:0回答:1

我们可以在同一条语句中同时使用$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"]

python python-3.x mongodb pymongo
1个回答
0
投票

不清楚你想做什么,但无论如何答案都不会改变。

所以... $组 可以接收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 是可以的。

© www.soinside.com 2019 - 2024. All rights reserved.