Скажите, что есть две схемы: User
и Order
.Схема User
имеет атрибут Orders
, представляющий собой массив Order
идентификаторов объектов, таких как:
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(...);
Я просто ищу самый эффективный способ выполнения этих типов запросов.