如何在pymongo中用特定字段分组输出?

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

在MongoDB中有一个集合。

例:-

{ field1: a, field2: 1, field3: val_1, field4: val_11}
{ field1: a, field2: 2, field3: val_2, field4: val_22}
{ field1: a, field2: 5, field3: val_3, field4: val_33}
{ field1: a, field2: 1, field3: val_4, field4: val_44}
{ field1: a, field2: 3, field3: val_5, field4: val_55}
{ field1: a, field2: 3, field3: val_6, field4: val_66}
{ field1: a, field2: 5, field3: val_7, field4: val_77}
{ field1: a, field2: 2, field3: val_8, field4: val_88}
{ field1: a, field2: 1, field3: val_9, field4: val_99}
{ field1: a, field2: 2, field3: val_10, field4: val_1010}
{ field1: a, field2: 3, field3: val_11, field4: val_1111}
{ field1: b, field2: 3, field3: val_12, field4: val_1212}
{ field1: b, field2: 3, field3: val_13, field4: val_1313}
{ field1: b, field2: 3, field3: val_14, field4: val_1414}
{ field1: b, field2: 3, field3: val_15, field4: val_1515}

我想通过字段来查询文档组的集合和输出情况:-。

例:-获取文档中的 field1a 按组 field2 价值观

{ field1: a, field2: 1, field3: val_1, field4: val_11}
{ field1: a, field2: 1, field3: val_4, field4: val_44}
{ field1: a, field2: 1, field3: val_9, field4: val_99}

{ field1: a, field2: 2, field3: val_2, field4: val_22}
{ field1: a, field2: 2, field3: val_8, field4: val_88}
{ field1: a, field2: 2, field3: val_10, field4: val_1010}

{ field1: a, field2: 5, field3: val_3, field4: val_33}
{ field1: a, field2: 5, field3: val_7, field4: val_77} 

{ field1: a, field2: 3, field3: val_5, field4: val_55}
{ field1: a, field2: 3, field3: val_6, field4: val_66} 
{ field1: a, field2: 3, field3: val_11, field4: val_1111}

我试着用 $groupaggregate 铩羽而归

如何实现预期的输出。

mongodb pymongo
1个回答
1
投票

$match 将会过滤掉文件中的 field1 不等于 a.

$group 将对数据进行分组,后面的表达式为 _id$push$$ROOT 数据栏中的文档。

db.collection.aggregate([
  { "$match": { "field1": "a" }},
  { "$group": {
    "_id": "$field2",
    "data": {
      "$push": "$$ROOT"
    }
  }}
])
© www.soinside.com 2019 - 2024. All rights reserved.