如何更新forEach()循环中的文档?

时间:2017-10-31 00:04:50

标签: mongodb mongoose

我正在尝试更新forEach()循环内的所有文档,但更新没有发生。我正在记录每次迭代以确保forEach()正在工作,而且确实如此。但是,由于某些原因,update()无效。

这是我的代码:

myModelSchema.methods.updateMyModel = function (cb) {
var myModel = this.model('MyModel');

myModel.find({}, function (err, items) {
    items.forEach(function (item) {
        console.log('item._id = ' + item._id);
        myModel.update(
            {
                _id: item._id
            },
            {
                $set: {
                    "some_array.0.some_field": item.some_field
                }
            }
        );
    })
});
};

如上所述,我看到console.log(),但文档未更新。我做错了什么?

1 个答案:

答案 0 :(得分:0)

正如Neil Lunn指出的那样,我没有回调。这是解决方案:

myModel.find({}, function (err, items) {
    items.forEach(function (item) {
        myModel
            .update(
                {
                    _id: item._id
                },
                {
                    $set: {
                        "some_array.0.some_field": item.some_field
                    }
                }
            )
            .exec()
            .then(function (data) {
                console.log('It works');
            })
            .catch(function (err) {
                console.log(err);
            });
    })
});

我需要使用同一文档中的字段值更新文档中的字段。上面的代码可以使用。

相关问题