【发布时间】:2020-03-19 18:09:58
【问题描述】:
我正在尝试在 mongoDb 上编写一个查询,以按特定字段 (storeId) 对数据进行分组。每个组将有多个相同 storeId 的记录。我需要按字段(时间戳)对每个组的记录进行排序。一个更好的解决方案是在对每个组的记录进行排序之后,只选择第一个记录,这样每个组只有一个记录。 这是我尝试过的:
const result = await deliverydays.aggregate([
{
$match: {
"storeId": { $in: storeIds },
"eci.openTimeStamp": { $ne: null },
"eci.dayStatus": "OPEN"
}
},
{
$group: {
_id: "$storeId",
data: {
$push: { openTimeStamp: "$eci.openTimeStamp", storeId: "$storeId" }
},
$sort: { openTimeStamp: 1 }
}
}
])
它报错“字段 '$sort' 必须是一个累加器对象” 我也试过这个:
const result = await deliverydays.aggregate([
{
$match: {
storeId: { $in: storeIds },
"eci.openTimeStamp": { $ne: null },
"eci.dayStatus": "OPEN"
}
},
{
$group: {
_id: "$storeId",
data: {
$push: { openTimeStamp: "$eci.openTimeStamp", storeId: "$storeId" }
}
}
},
{
$sort: { openTimeStamp: 1 }
}
])
但还是不行。我意识到第二个结构只有当我想按“_id”或“数据”排序时
任何帮助将不胜感激。如果这被认为很容易,我提前道歉,但我是 IT 界的新手,而且我来自 SQL Server。
【问题讨论】:
-
你应该使用
$sort: { "data.openTimeStamp": 1 } -
它似乎不起作用。
标签: mongodb mongodb-query