我在 mongodb 中有一个集合 events
。我想根据 DATE (d-m-Y) GROUP
数据仅来自 event_time
字段,但之后 sort
基于 datetime (d-m-Y H:i:s)
我尝试的集合示例和解决方案是 here
现在,当我运行查询时,每次我得到 products
数组未排序/混洗,但我想得到 products
数组按 DATETIME (d-m-Y H:i:s)
排序,但外部结果将按 { 排序{1}}
PS:我也在生产中的 SORT 阶段之前使用 UNWIND 阶段来使用 SKIP 和 LIMIT 阶段。
答案 0 :(得分:1)
问题的原因是$addToSet
阶段的$group
,它不会保留顺序,您可以尝试另一种方法,
$sort
按 event_time
降序排列$group
到 event_time
日期并推送所有 product_id
$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 } }
])