【问题标题】:How to group data and get and get all the field back in mongodb [duplicate]如何对数据进行分组并在mongodb中获取和获取所有字段[重复]
【发布时间】:2021-07-09 06:25:38
【问题描述】:

我在 mongodb 中有一个集合,并希望通过修改对发票进行分组并获取这些对象中的所有字段。

{ 
   modified: "11/02/2020",
   stocks: [
             {
              product:{
                 name:"Milk",
                 price: 20
              }
              quantity: 2,
              paid: true
            }
          ]
},
{ 
  modified: "10/02/2020",
  stocks: [
             {
              product:{
                 name:"Sugar",
                 price: 50
              }
              quantity: 1,
              paid: false
            }
   ]
 },
 { 
   modified: "10/02/2020",
   stocks: [
             {
              product:{
                       name:"Butter",
                       price: 10
                    }
              quantity: 5,
              paid: false
            }
        ]
   }

所以我尝试了:

  db.collection.aggregate([{
        $group: {
          _id: "$modified",  
          records: { $push: "$$ROOT" } 
        }
     }
  ])

但它会重新聚合被推送到生成重复记录的修饰符字段

【问题讨论】:

  • 添加您的样本数据mongoplayground.net并查询
  • 谢谢,但如何进行查询才是真正的要求

标签: mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

演示 - https://mongoplayground.net/p/4AGuo5zfF4V

使用$group

db.collection.aggregate([
  {
    $group: { _id: "$grade",  records: { $push: "$$ROOT" } }
  }
])

输出

[
  {
    "_id": "A",
    "records": [
      {
        "_id": ObjectId("5a934e000102030405000000"),
        "grade": "A",
        "name": "John",
        "subject": "English"
      },
      {
        "_id": ObjectId("5a934e000102030405000001"),
        "grade": "A",
        "name": "John1",
        "subject": "English"
      }
    ]
  },
  {
    "_id": "B",
    "records": [
      {
        "_id": ObjectId("5a934e000102030405000002"),
        "grade": "B",
        "name": "JohnB",
        "subject": "English"
      },
      {
        "_id": ObjectId("5a934e000102030405000003"),
        "grade": "B",
        "name": "JohnB1",
        "subject": "English"
      }
    ]
  }
]

【讨论】:

  • 它适用于以前的数据,但是当我使用上述数据集再次运行它时,它会在导致重复的记录中的修改字段上重新运行聚合循环
  • @yaxx 重复是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2020-07-26
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多