Arrays 在MongoDb中,有没有一种方法可以从多个文档中获取最后1000个数组元素

Arrays 在MongoDb中,有没有一种方法可以从多个文档中获取最后1000个数组元素,arrays,mongodb,nosql,querying,Arrays,Mongodb,Nosql,Querying,给定以下Mongo文档模型: 集合中的每个文档表示1小时的资源监视。在每一份文件中,都有一组摘要。还可以将摘要的数量计算为一个整数,因为这可能会使生活更轻松 是否有一种有效的方法来查询集合并将最近的1000个摘要作为聚合列表返回 还是查询集合并返回包含最近1000个摘要的文档数的有效方法 每个文件中的摘要数量会有所不同,但单个文件中的摘要数量永远不会超过1000 编辑:我应该提到我正在将mongo与.NET驱动程序一起使用,所以我可以使用LINQ。您看过mongo聚合吗?如果要返回1000个最新

给定以下Mongo文档模型:

集合中的每个文档表示1小时的资源监视。在每一份文件中,都有一组摘要。还可以将摘要的数量计算为一个整数,因为这可能会使生活更轻松

是否有一种有效的方法来查询集合并将最近的1000个摘要作为聚合列表返回

还是查询集合并返回包含最近1000个摘要的文档数的有效方法

每个文件中的摘要数量会有所不同,但单个文件中的摘要数量永远不会超过1000


编辑:我应该提到我正在将mongo与.NET驱动程序一起使用,所以我可以使用LINQ。

您看过mongo聚合吗?如果要返回1000个最新摘要,可以先执行$unwind,然后执行$replaceRoot操作,下面是我尝试的shell查询:

db.getCollection('test').aggregate([
{$match : {your timestamp match query here}},
{$sort : {"timestamp": -1}},
{$unwind : "$summaries"},
{$limit : 1000},
{$replaceRoot: {newRoot: "$summaries"}}
])

聚合管道开始时的匹配操作很重要,因为索引仅在第一步使用。如果你把整个系列都放出来,你的性能可能会大幅下降。

我有几个问题:你在运行哪个版本的MongoDB?您是否在某个日期筛选请求?ie:2017年9月26日的总结我相信我使用的是3.4.7版,我使用的是csharp驱动程序v2.4.4.0。我通常会对时间戳进行过滤,并将其编入索引,我想如果有1000个摘要,我可能会在几个小时内进行检查,但我想知道是否有更有效的方法。关于第二个问题,您希望返回什么,包含前1000个时间戳的文档的ID,或者仅仅是文档的数量?最终我想要一个最近1000个摘要的列表。明天我将尝试一下。谢谢你的帮助,刚刚在机器人上测试过,效果很好。。。现在,我们来看看如何使用驱动程序。谢谢你的帮助