var pipeline = [
{
"$match": { //stage 1: filter out a subset
"first_field": "needs to have this value",
"second_field": "needs to be this"
}
},
{
"$sort": { //stage 2: sort the remainder last-first
"timestamp": -1
}
},
{
"$limit": 20 //stage 3: keep only 20 of the descending order subset
},
{
"$sort": {
"rt": 1 //stage 4: sort back to ascending order
}
},
{
"$project": { //stage 5: add any fields you want to show in your results
"_id": 1,
"timestamp" : 1,
"whatever_field_you_want_to_show": 1
}
}
]
yourcollection.aggregate(pipeline, function resultCallBack(err, result) {
// account for (err)
// do something with (result)
}
var query = collection.find( { conditions } ).sort({$natural : -1}).limit(N);
query.exec(function(err, results) {
if (err) {
}
else if (results.length == 0) {
}
else {
results.reverse(); // put the results into the desired order
results.forEach(function(result) {
// do something with each result
});
}
});
11 回答
@斌臣,
您可以将聚合用于集合中文档子集的最新n个条目 . 这是一个没有分组的简化示例(在这种情况下,您将在第4和第5阶段之间进行分组) .
这将返回最新的20个条目(基于名为“timestamp”的字段),按升序排序 . 然后它将每个文档_id,timestamp和whatever_field_you_want_to_show投影到结果中 .
所以,结果看起来像:
希望这可以帮助 .
您不能根据集合的大小“跳过”,因为它不会考虑查询条件 .
正确的解决方案是从所需的终点进行排序,限制结果集的大小,然后根据需要调整结果的顺序 .
这是一个基于真实世界代码的例子 .
根据mongoDB Documentation:
最后一个函数应该是
sort
,而不是limit
.例:
使用此查询可以看到最近的 N 添加的记录,从最近到最近的记录:
如果你想以相反的顺序:
如果您安装Mongo-Hacker,您还可以使用:
如果您厌倦了编写这些命令,您可以在〜/ .mongorc.js中创建自定义函数 . 例如 .
然后从mongo shell中输入
last(N)
使用 $slice 运算符来限制数组元素
geolocation是数据数组,我们得到最后5条记录 .
你可以使用
sort()
,limit()
,skip()
从任何跳过的值开始最后N个记录如果我理解你的问题,你需要按升序排序 .
假设你有一些名为“x”的id或日期字段你会做...
.sort()
1 将按升序排序(从最旧到最新), -1 将按降序排序(从最新到最旧) .
如果您使用自动创建的 _id 字段,则会在其中嵌入日期...因此您可以使用它来按顺序排序...
这将返回从最旧到最新排序的所有文档 .
自然秩序
您也可以使用上面提到的Natural Order ...
同样,根据您想要的顺序使用 1 或 -1 .
使用.limit()
最后,在进行这种大开放查询时添加限制是一个好习惯,这样你就可以做到...
要么
为了获得最后N条记录,您可以执行以下查询:
如果你只想要最后一条记录:
注意:代替$ natural,您可以使用集合中的一列 .
查看下查询:排序和自然顺序,http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order以及光标方法下的sort()http://www.mongodb.org/display/DOCS/Advanced+Queries
您可能想要使用
find
选项:http://docs.meteor.com/api/collections.html#Mongo-Collection-find