MongoDB-是否可以按日期分组并重新排序到数组中?
我有一个nodejs后端正在运行,连接到mongodb。我的文档看起来像:MongoDB-是否可以按日期分组并重新排序到数组中?,mongodb,Mongodb,我有一个nodejs后端正在运行,连接到mongodb。我的文档看起来像: { _id: ObjectID date: "2020-05-05T09:01:55.868+00:00" keyA: valueA keyB: valueB }, { _id: ObjectID date: "2020-05-05T09:01:55.868+00:00" keyA: valueC keyB: valueD }, { _id: ObjectID date: "202
{
_id: ObjectID
date: "2020-05-05T09:01:55.868+00:00"
keyA: valueA
keyB: valueB
},
{
_id: ObjectID
date: "2020-05-05T09:01:55.868+00:00"
keyA: valueC
keyB: valueD
},
{
_id: ObjectID
date: "2020-05-05T09:02:56.868+00:00"
keyA: valueE
keyB: valueF
}
{
date: "2020-05-05T09:01:55.000+00:00"
items: [
{
keyA: valueA
keyB: valueB
},
{
keyA: valueC
keyB: valueD
}
]
},
{
date: "2020-05-05T09:02:56.000+00:00"
items: [
{
keyA: valueE
keyB: valueF
}
]
}
现在,我想按日期对所有文档进行分组,但不丢失额外的值。我的结果应该是:
{
_id: ObjectID
date: "2020-05-05T09:01:55.868+00:00"
keyA: valueA
keyB: valueB
},
{
_id: ObjectID
date: "2020-05-05T09:01:55.868+00:00"
keyA: valueC
keyB: valueD
},
{
_id: ObjectID
date: "2020-05-05T09:02:56.868+00:00"
keyA: valueE
keyB: valueF
}
{
date: "2020-05-05T09:01:55.000+00:00"
items: [
{
keyA: valueA
keyB: valueB
},
{
keyA: valueC
keyB: valueD
}
]
},
{
date: "2020-05-05T09:02:56.000+00:00"
items: [
{
keyA: valueE
keyB: valueF
}
]
}
实现这一目标的最佳方式是什么?我想我可以只查询所有内容并编写一些简单的js,但是为了速度和简单起见,我想将所有内容合并到mongodb查询中。我发现了许多关于聚合$group函数的帖子,但他们使用它的目的只是计算找到了多少项(在我的例子中是项)。正如你可能已经注意到的那样,我不仅希望按完全相同的日期分组,而且还希望按时间段分组,在我的例子中是1s。你可以试试这个
db.helloworld.aggregate ([
{
$group: {
_id: "$date",
items: { $push: { keyA: "$keyA", keyB: "$keyB" } }
}
}
])
希望这有帮助。非常感谢。这正是我想要的。