MongoDB聚合请求的最佳用途

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

我想强调一个基于ObjectId列表按降序(通过时间戳)排列的_id文档列表(有限制)

与此对应:

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
搜索,并且希望结果按时间戳降序排序。有关索引的更多信息,请参阅。