【问题标题】:Mongo DB Limit with aggregateMongodb 限制与聚合
【发布时间】:2020-03-03 20:33:19
【问题描述】:

我有一份文件显示下面的数据有项目名称的状态

{
    "_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. 每个唯一状态都有自己的数据数组,数据限制为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 的新手。

谢谢,

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    你需要使用$group

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

    Mongo Playground

    【讨论】:

    • 我需要每组 2 个数据。
    猜你喜欢
    • 2017-11-08
    • 2020-06-11
    • 2023-04-07
    • 2018-02-20
    • 2013-12-05
    • 1970-01-01
    • 2018-08-06
    • 2014-08-19
    相关资源
    最近更新 更多