如何根据 time
字段获取第一个和最后一个文档。
我可以使用 $group
并获取 $first
和 $last
文档,但我不需要在这里分组,只需获取第一个和最后一个完整的文档。也许我可以使用 slice
?此查询不起作用:
{
"aggregate": "353469045637980_data",
"pipeline": [
{
"$match": {
"$and": [
{
"time": {
"$gte": 1461369600
}
},
{
"time": {
"$lt": 1461456000
}
}
]
}
},
{
"$project": {
"first": {
"$slice": 1
},
"last": {
"$slice": -1
}
}
}
]
}
最佳答案
你需要 $group
但你可以简单地使用一个常量(例如 null
,参见 the docs )作为它的 id
以便它产生一个组。 $$ROOT then 指的是文档本身,您可以像这样使用 $first
和 $last
$group: {
_id: null,
first: { $first: "$$ROOT" },
last: { $last: "$$ROOT" }
}
当然,您可以引入进一步的 $project
阶段以将该数据塑造成一个数组(正如您提到的,您需要一个列表)等。
作为旁注,您可能需要引入 $sort
阶段以确保 $first
和 $last
具有正确的含义。
关于MongoDB在聚合查询中获取第一个和最后一个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975607/