【问题标题】:Update an array of documents in Mongoose更新 Mongoose 中的文档数组
【发布时间】:2014-11-03 05:55:05
【问题描述】:

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

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

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();

}


});

在此之前,我试图做这样的事情:

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);
});

问题在于 generateRandomCode() 只被调用一次,但我需要为每个文档创建不同的代码。所以这些例子都不起作用。

【问题讨论】:

  • 我想知道这是否是异步问题?如果您在!err 条件内进行控制台,并且就在return next() 之前,它们是否以正确的顺序发生?
  • 没关系。问题更多的是我认为您不能使用 Model.update 传递一组文档。您查询您的文档并在更新函数中设置您想要的任何值并将 multi 设置为 true。但是您不能为要更新的文档设置唯一值。我添加了额外的代码来显示这一点。

标签: node.js mongodb mongoose


【解决方案1】:

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

在这个网址上查看这个问题的答案:Update model with Mongoose, Express, NodeJS

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 2017-03-31
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2020-05-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多