猫鼬在循环中获取多个对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猫鼬在循环中获取多个对象相关的知识,希望对你有一定的参考价值。

我正在尝试使用mongoose从MongoDB获取多个对象。我有两个主表名为user和order。

用户有一个名为订单历史的数组,订单历史包含订单。

当我将订单推送到订单数组时,订单成功推送。但是当我想从循环外部获取命令时,由于循环内部发生异步操作,我的数组没有任何结果。

CODE

userModel.findOne({'username': username }, function (err, user) {
        if(user){
            var orders = [] 

            for(var i=0;i<user.orderHistory.length;i++){
                var orderId = user.orderHistory[i].orderId

                var order = orderModel.findOne({'id': orderId}).exec()

                order.then(function(order){
                    orders.push(order)
                })              
            }

            orders.then(function(order){
                console.log(order)
            })
        }
    })

如何在循环之外获得订单?萨诺斯

答案

改为使用异步函数,每个订单使用await

userModel.findOne({ username }, async function (err, user) {
  if (!user) return;
  const orders = [];
  for (const { orderId: id } of user.orderHistory) {
    const order = await orderModel.findOne({ id }).exec();
    orders.push(order);
  }
  console.log(orders);
})

以上是关于猫鼬在循环中获取多个对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥猫鼬在更新时不验证?

为啥猫鼬在更新时不验证?

猫鼬在查找中排除时返回默认值

如何使用基于关键字的猫鼬在节点中进行搜索

如何在平均堆栈中使用猫鼬在 Mongodb 中存储值

从猫鼬的多个集合中获取数据?