如果我对聚合查询的结果进行排序,我可以访问结果中的文档位置吗?这将用于在$ project中执行计算,而不是返回结果并迭代它们。
文档位置为0,1,2等的期望结果:
db.trips.aggregate([
{ $match: { driver: "xx" } },
{ $sort: { "start.time": -1 } },
{ $project: {
_id: 1,
driver: 1
document_position: ____
} }
])
答案 0 :(得分:0)
您需要的是$limit和$skip管道阶段。使用它们只能获得一系列记录,而不能从不连续的索引中选择记录。
var fromindex = 1; // define the index from which you want to pick the documents.
// Assuming index starts from 0.
var numberOfDocuments = 3; // The number of documents from the position.
db.trips.aggregate([
{$match:{"driver": "xx"}},
{$sort:{"start.time": -1}},
{$skip:fromindex-1},
{$limit:numberOfDocuments},
{ $project: {
_id: 1,
driver: 1
}
])
这将按排序顺序返回位置1,2,3的文档。
如果您看到,$project
阶段中没有文档位置。这不是必需的,因为您可以按顺序获得结果并将其转换为数组并通过客户端的索引获取文档。