javascript - 如何处理for循环中nodejs的回调函数?

标签 javascript node.js mongodb mongoose

我的 Mongoose 架构是

skills : [
        {
            name : {type : String},
            count : {type :Number, default:0}
        }
    ]

我正在使用 for 循环触发更新查询,因为我想更新文档数组,我的查询是

  for(var i=0;i<array.length;i++){
   Talent.update({userName : userName}, {$addToSet: {skills :{$each: [{name : array[i]}]}}},callback);
 }

这里回调会在每次更新查询被触发时返回。我只想在 for 循环完成时使用数据库结果进行回调一次。 我该怎么办?

最佳答案

这看起来确实像是您要求仅修改一个文档,但如果您当前正在循环更新,则不需要这样做。

您还要求修改后的结果,该结果实际上属于 .findOneAndUpdate() 之类的方法,因为该表单返回修改后的文档。 .update() 形式可以应用于多个文档,因此不会在结果中返回修改后的内容:

所以它看起来确实像而不是循环,那么您需要做的就是“重新塑造”您的输入数组:

    var array = ["Tennis","Football"];
    array = array.map(function(x) {
        return { "name": x };
    });
    // array is now [{ "name": "Tennis" }, { "name": "Football" }]

    Talent.findOneAndUpdate(
        { "userName": userName },
        { 
            "$addToSet": { "skills": { "$each": array } }
        },
        function(err,doc) {
            if (err) throw err;
            // doc contains all array members added
            console.log( JSON.stringify( doc, undefined, 4) );
            callback(); // Your outer callback
        }
    );

$each修饰符在最后一种情况下采用数组参数,因此只需重新调整原始数组中的输入参数以匹配更新实际文档时所需的结构即可。

还有其他方法可以处理串行执行循环,但在这种情况下您似乎不需要它。

关于javascript - 如何处理for循环中nodejs的回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24858730/

相关文章:

java - 如何在java中从Mongo子文档中获取特定数据?

php - 直接从 PHP 将 JSON 插入 MongoDb

javascript - 如果下拉选择值为 1,JQuery 添加必需的属性

javascript - 异步主题范围 Vows.JS

Javascript 函数未被调用 hx :commandExButton 的 onclick

ruby-on-rails - 如何在 sails js 中创建模型的新实例?

angularjs - 如何获取从 Angular 到 NodeJS/Express JS 的多个 GET 请求参数

javascript - <li> 标签可以使用 Modal 吗?

javascript - 如何从 Service Worker 调用缓存的 ManifestEntry Javascript 函数?

c# - 使用 C# 查询 MongoDB 嵌套数组文档