汇总的Mongo DB限制

时间:2020-02-18 07:43:02

标签: mongodb mongodb-query

我有一个文档,显示以下数据的状态为项目名称

{
    "_id" : ObjectId("5e4aaf6f9588116a6b36e9d4"),
    "item" : "Item_1",
    "status" : 1
}
{
    "_id" : ObjectId("5e4aaf6f9588116a6b36e9d5"),
    "item" : "Item_2",
    "status" : 1
}
{
    "_id" : ObjectId("5e4aaf6f9588116a6b36e9d6"),
    "item" : "Item_3",
    "status" : 1
}


.....

{
    "_id" : ObjectId("5e4aaf6f9588116a6b36e9de"),
    "item" : "Item_11",
    "status" : 3
}
{
    "_id" : ObjectId("5e4aaf6f9588116a6b36e9df"),
    "item" : "Item_12",
    "status" : 3
}

我需要选择以下条件的所有数据。 1.显示所有唯一状态。 2.每个唯一的Status都有自己的数据数组,数据限制为2。

{
    "_id" : ObjectId("5e4aaf6f9588116a6b36e9d7"),
    "status" : 1,
    "data" : [
        {
            "_id" : ObjectId("5e4aaf6f9588116a6b36e9d4"),
            "item" : "Item_1",
            "status" : 1
        },
        {
            "_id" : ObjectId("5e4aaf6f9588116a6b36e9d5"),
            "item" : "Item_2",
            "status" : 1
        }
    ]
},
........
{
    "_id" : ObjectId("5e4aaf6f9588116a6b36e9dd"),
    "status" : 3,
    "data" : [
        {
            "_id" : ObjectId("5e4aaf6f9588116a6b36e9dd"),
            "item" : "Item_10",
            "status" : 3
        },
        {
            "_id" : ObjectId("5e4aaf6f9588116a6b36e9de"),
            "item" : "Item_11",
            "status" : 3
        }
    ]
}

请帮助我。我是mongoDB的新手。

谢谢

1 个答案:

答案 0 :(得分:0)

您需要使用$group

db.collection.aggregate([
  {
    "$group": {
      _id: "$status",
      status: { "$first": "$status" },
      data: { $push: "$$ROOT" } }
  },
  { "$addFields": { data: { $slice: [ "$data", 2 ] } } }
])

Mongo Playground