【问题标题】:Group data by DATE and sort by DATETIME mongodb按 DATE 分组数据并按 DATETIME 排序 mongodb
【发布时间】:2021-07-18 09:08:16
【问题描述】:

我在 mongodb 中有一个集合 events。我想GROUP 仅来自event_time 字段的基于日期(d-m-Y)的数据,但之后基于datetime (d-m-Y H:i:s)sort

我尝试过的收藏示例和解决方案是here

现在,当我运行查询时,每次我得到products 数组未排序/无序,但我想得到products 数组按DATETIME (d-m-Y H:i:s) 排序但外部结果将按date (d-m-Y) 排序

PS:我也在生产中使用 SORT 阶段之前的 UNWIND 阶段来使用 SKIP 和 LIMIT 阶段。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    问题的原因是$addToSet$group阶段,它不会保持顺序,你可以尝试其他方法,

    • $sort event_time 按降序排列
    • $group by event_time 日期并推送所有product_ids
    • $reduce 删除所有重复的products,检查是否未找到产品然后连接reduce的初始值
    • $sort by _id 表示按降序排列的日期
    db.collection.aggregate([
      {
        $match: {
          "cuid": "608707",
          "event_name": "product_viewed"
        }
      },
      { $sort: { event_time: -1 } },
      {
        $group: {
          "_id": {
            "$dateToString": {
              "format": "%d-%m-%Y",
              "date": "$event_time"
            }
          },
          "products": { "$push": "$event_data.product_id" }
        }
      },
      {
        $addFields: {
          products: {
            $reduce: {
              input: "$products",
              initialValue: [],
              in: {
                $cond: [
                  { $in: ["$$this", "$$value"] },
                  "$$value",
                  { $concatArrays: ["$$value", ["$$this"]] }
                ]
              }
            }
          }
        }
      },
      { $sort: { _id: -1 } }
    ])
    

    Playground

    【讨论】:

    • 脱帽先生... Bravooooooo :)
    • 仅供参考(作为单独的案例),作为 $addToSet 在数组中插入元素,我们有什么方法可以在数组中插入文档...比如[{product_id : 123 , datetime : SOME_VALUE}, {product_id : 345 , datetime : SOME_VALUE}]
    • 还有其他方法是$push 运算符。我们在查询中使用的。
    • 请给我看一个将 DOCUMENT 插入数组的示例...(使用任何数据集的示例,仅供参考)。
    • 你的意思是在 $group 阶段吧?见playground
    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 2022-12-16
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多