首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB聚合-按_id分组,然后按另一个字段排序

MongoDB聚合-按_id分组,然后按另一个字段排序
EN

Stack Overflow用户
提问于 2020-09-01 07:21:44
回答 1查看 112关注 0票数 1

我被困在这上面已经5天了。

我试图聚合如下所示的MongoDB对象数组:

代码语言:javascript
复制
[
  {
    _id: 2,
    store: "Vincenzo Pizza Tavern",
    bundle: "",
    group: "",
    state: "nothing",
  },
  {
    _id: 2,
    store: "Vincenzo Pizza Tavern",
    bundle: "VinnyBundle",
    group: "VinnyGroup",
    state: "waiting",
  },
  {
    _id: 4,
    store: "Marios",
    bundle: "",
    group: "Mario Group",
    state: "nothing",
  },
  {
    _id: 4,
    store: "Marios",
    bundle: "Mias_Dias",
    group: "Mario Group",
    state: "waiting",
  },
  {
    _id: 5,
    store: "Marios",
    bundle: "Mias_Dias_Menu",
    group: "Mario Group",
    state: "current",
  }
]

必须在_id上对数据进行分组,并对状态字段进行排序。优先顺序是“无”、“等待”和“当前”。

代码语言:javascript
复制
Outcome:

[
  {
    _id: 2,
    store: "Vincenzo Pizza Tavern",
    bundle: "VinnyBundle",
    group: "VinnyGroup",
    state: "waiting",
  },
  {
    _id: 5,
    store: "Marios",
    bundle: "Mias_Dias_Menu",
    group: "Mario Group",
    state: "current",
  }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 07:35:02

必须在_id上对数据进行分组,并对状态字段进行排序。优先顺序是“无”、“等待”和“当前”。

正如评论中指出的那样

  1. _id必须是唯一的
  2. 您的预期结果与描述不同。

实现您在声明中提到的所需内容

代码语言:javascript
复制
db.collection.aggregate([
  {
    $addFields: { //custom sort order
      type: {
        $cond: [
          {
            $eq: [
              "$state",
              "nothing"
            ]
          },
          0,
          {
            $cond: [
              {
                $eq: [
                  "$state",
                  "waiting"
                ]
              },
              1,
              2
            ]
          }
        ]
      }
    }
  },
  {
    $sort: {//sort
      "type": 1
    }
  },
  {
    $group: {//group by `id` - a custom field than `_id`
      "_id": "$id",
      "data": {
        $push: "$$ROOT"
      }
    }
  }
])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63683110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档