MongoDB聚合请求的最佳用途
我想强调一个基于ObjectId列表按降序(通过时间戳)排列的_id文档列表(有限制) 与此对应:MongoDB聚合请求的最佳用途,mongodb,mongodb-query,bson,Mongodb,Mongodb Query,Bson,我想强调一个基于ObjectId列表按降序(通过时间戳)排列的_id文档列表(有限制) 与此对应: db.collection.aggregate( [ { $match: { _id: { $in: [ObjectId("X"), ObjectId("Y") ] } } }, { $sort: { timestamp: -1 } }, { $group: { _id: "$_id" } }, { $skip: 0 }, { $limit: 100 } ] ) 知道循环中的列表可能包含1000
db.collection.aggregate( [ { $match: { _id: { $in: [ObjectId("X"), ObjectId("Y") ] } } }, { $sort: { timestamp: -1 } }, { $group: { _id: "$_id" } }, { $skip: 0 }, { $limit: 100 } ] )
知道循环中的列表可能包含1000多个ObjectId(数组中的$in),您认为我的解决方案可行吗?难道没有一种更快、更少的资源密集型方法吗
致意。索引
时间戳
字段,使用查找查询:db.collection.find({“\u id”:{$in:input})。排序({“timestamp”:-1})。限制(100)
,这仍然不会影响$in
操作符的参数,您可以尝试为并行分布式搜索设置不同的碎片,或者通过拆分输入数组并在客户端合并结果来触发n
数量的查询。根据@BatScream的注释,您应该使用更简单的find()
查询,而不是聚合框架(在聚合框架中,您正在执行不必要的处理,如按已唯一的\u id
进行分组)。建议的索引应该是{u id:1,timestamp:-1}
,因为您正在按{u id
搜索,并且希望结果按时间戳降序排序。有关索引的更多信息,请参阅。