说a有两种模式:User
和Order
。 User
模式具有属性Orders
,它是Order
对象ID的数组,如下所示:
Orders: [{
ref: 'Order',
type: mongoose.Schema.Types.ObjectId
}]
如何用光标遍历用户的填充 Orders
?理想情况下,我正在寻找这样的东西:
User.find({ _id: userID }).
.cursor('Orders')
.eachAsync(async (order) => {
// Do something with each order
});
我想使用游标,因为所有订单都无法容纳在内存中。
我考虑过的替代方法2:
const user = await User.findById(userID);
Order.find({ _id: $in: user.Orders }).cursor().eachAsync(...);
我考虑过的替代方法#3:
将UserID
字段添加到Order模式,然后执行以下操作:
const user = await User.findById(userID);
Order.find({ UserID: user._id }).cursor().eachAsync(...);
我只是在寻找一种最有效的方式来执行这些类型的查询。
答案 0 :(得分:0)
这完全取决于订单的大小
查看有关您的选项here
的详细说明或者,您可以使用聚合框架并在单个操作中完成所有这些操作,但是除非您想退回多个用户的订单,否则它不会比#2或#3效率更高。