javascript - mongoose:如何循环包含对象引用(_id)的数组

标签 javascript node.js mongodb asynchronous mongoose

我有一个meanjs项目,我从服务器上的用户那里获取一些输入,请求正文具有以下结构:

{
   transaction: { 
       heading: '',
       items: [Object]    
   },
   something: {},
   somethingAgain: {}
}

items数组的结构如下 -

[ { ref: '5607c6536e67edb44a6a8186',
    name: '',
    quantity: 0,
    discount: 0,
    cost: 180 } ]

其中 ref 是我的 Item 模型中该项目的 _id 值。 因此,基本上我想做的是循环遍历项目数组并填充每个引用的属性,并相应地计算每个项目的成本属性。 我无法使用简单的 for 循环,因为它会在第一次异步调用 mongodb 来查找项目完成之前自行执行。 那么,如何处理这个问题呢?请建议。

因此,向问题添加更多信息 - 我接收请求的服务器端 Controller 代码如下 -

exports.create = function (req, res) {
    console.log(req.body.transaction.items);
    Sale.create(req.body, function (err, sale) {
        if (err) {
            return handleError(res, err);
        }
        return res.json(201, sale);
    });
};

项目的日志输出如我上面所示。所以我在这里要做的是迭代 items 数组并找到 ref 与 Items 集合匹配的项目。

最佳答案

如果我理解正确,我建议使用 Kris Kowal's q为了这。它是一个小型的 Promise 库,您可以与 Node 一起使用。 Angular 的 $q 就是基于它的。这是一个例子:

function(req, res){

    var calls = [];

    calls.push(Collection1.save());

    calls.push(Collection2.save());

    calls.push(Collection3.save());

    q.all(calls).then(function(call1res, call2res, call3res){
        res.json({whaterver:''});
    });
}

关于javascript - mongoose:如何循环包含对象引用(_id)的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846387/

相关文章:

mysql - 从VM实例访问远程MySQL数据库

mongodb - 如何使用 C# 驱动程序更新和更新 MongoDB 中的多个文档

mongodb - 查询相似对象的 MongoDB 数组

javascript - Facebook 扩展权限对话框截止 - 不显示允许/禁止按钮

javascript - 在揭示模块模式中返回 jQuery Promise

javascript - jQuery 回调仅在某种程度上执行

javascript - 使用图像作为框架来显示动画的最佳方式是什么?

node.js - npm install socket.io 卡在 node-gyp 步骤上

node.js - 为什么 `buffer` 和 `new Buffer(buffer.toString())` 并不总是逐字节相等?

node.js - 将 mongodb 中的字符串时间转换为日期