【问题标题】:MongoDB aggregate get distinct values of field and output list of another fieldMongoDB聚合获取字段的不同值和另一个字段的输出列表
【发布时间】:2021-06-23 03:48:08
【问题描述】:

我有一个 MongoDB 集合,其中包含以下文档:

{'city': 'NYC', 'value': 'blue'},
{'city': 'NYC', 'value': 'red'},
{'city': 'Boston', 'value': 'blue'},
{'city': 'Boston', 'value': 'green'}

我想将不同的城市值与不同的价值值列表聚合起来,例如:

{'city': 'NYC', 'values': ['blue', 'red']},
{'city': 'Boston', 'values': ['blue', 'green']}

如何在 PyMongo 管道中执行此操作?

类似外壳的东西:

cursor = db.aggregate([
        {'$group': {
            '_id': {
                'value': '$value',
                'city': '$city'
            }
        }},
])

【问题讨论】:

  • 看看这个answer,你只需要一个像这个答案这样的$group stage。

标签: python mongodb aggregation-framework pymongo


【解决方案1】:

在组的_id 字段中,您应该只指定要分组的键(在您的情况下为city)。

紧随其后的是该键,其余键是您希望从查询结果中获得的附加键。 $addToSet 会将分组字段的每个结果附加到一个不重复的数组中。

以下是您要查找的聚合代码:

cursor = db.aggregate([
  {
    "$group": {
      "_id": "$city",
      "value": {
        "$addToSet": "$value"
      }
    }
  },
])

在 about 代码中,_id 由分组的城市名称组成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2019-10-25
    • 2015-05-15
    相关资源
    最近更新 更多