Mongodb MongooseJs使用$in或Promise.all进行查询?

Mongodb MongooseJs使用$in或Promise.all进行查询?,mongodb,performance,mongoose,Mongodb,Performance,Mongoose,我只想问一个问题 假设我有一个1到10000的ID数组 [1, 2, 3, 4....... 10000] 现在我想获取所有数据,哪一种是快速的、性能更好的还是更可取的 await Promise.all( usersIds.map(async userId => dbCollection.users.findById(userId)) ); 或 一般来说,您希望使用$in而不是Promise.all-它减少了您必须来回使用的网络数量,如果您使用连接池,连接池不会完全饱和,并且最终

我只想问一个问题 假设我有一个1到10000的ID数组

[1, 2, 3, 4....... 10000]
现在我想获取所有数据,哪一种是快速的、性能更好的还是更可取的

await Promise.all(
  usersIds.map(async userId => dbCollection.users.findById(userId))
);


一般来说,您希望使用$in而不是Promise.all-它减少了您必须来回使用的网络数量,如果您使用连接池,连接池不会完全饱和,并且最终在mongo中的工作量大致相同


假设您的用户名为1..10000,使用$gte和$lte会更快,因为您最终会得到更好的查询计划mongo query planner本身不够聪明,无法做到这一点。

如果您想更快,您可以将用户标识分块到X查询中,其中X小于连接池中打开的连接数
dbCollection.users.find({
  _id: {$in: usersIds} 
})