Node.js 更新Mongoose中的文档数组

Node.js 更新Mongoose中的文档数组,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,如果每个文档的属性值需要不同(唯一编号),如何更新集合中的所有文档 下面是我当前的代码。这实际上似乎在更新(我没有得到错误),但数据库中的值没有被更新 Model.find({}, function (err, docs) { if (err) { console.log(err); }; if(docs && docs.length > 0){ for(var i=0; i<docs.length; i++){

如果每个文档的属性值需要不同(唯一编号),如何更新集合中的所有文档

下面是我当前的代码。这实际上似乎在更新(我没有得到错误),但数据库中的值没有被更新

Model.find({}, function (err, docs) {

    if (err) {

        console.log(err);

    };



if(docs && docs.length > 0){


    for(var i=0; i<docs.length; i++){

    //SET NEW VALUE FOR EACH DOC - VALUE MUST BE UNIQUE TO EACH DOC
        docs[i].code = generateRandomCode();    

    }


    // PASS IN ARRAY OF UPDATED DOCS TO BE SAVED
    Model.update(docs, function (err, docs) {
        if (err) {
            console.log(err);
        }

        if(!err){   
            req.updatedSuccessfully = true;
        }

        return next();



    });


}
else{

    return next();

}


});

问题是generateRandomCode()只被调用一次,但我需要为每个文档创建不同的代码。因此,这两个示例都不起作用。

您可以尝试简单地保存文档,而不是尝试model.update()


请参阅此url上此问题的答案:

我想知道这是否是一个异步问题?如果您在
中使用控制台!err
条件,并且就在
返回下一步()
之前,它们是否以正确的顺序发生?不,可以。问题更多的是,我认为您无法通过Model.update传递文档数组。您可以查询文档,在update函数中设置所需的任何值,并将multi设置为true。但不能为正在更新的文档设置唯一值。我添加了额外的代码来显示这一点。
Model.update({}, { code: generateRandomCode() }, { multi: true }, function (err,      numberAffected, raw) {
  if (err) return handleError(err);
  console.log('The number of updated documents was %d', numberAffected);
  console.log('The raw response from Mongo was ', raw);
});