【问题标题】:How to update multiple Mongo documents manually in NodeJs?如何在 Node Js 中手动更新多个 Mongodb 文档?
【发布时间】:2016-05-07 21:40:51
【问题描述】:

我在 MongoDB 中有一组 users。我需要为每个用户生成一个令牌并将其保存到数据库中:

var crypto = require('crypto');
db.users.find({}).exec(function(users){
    users.forEach(function(user){
       user.token = crypto.randomBytes(32).toString('hex');
       user.save();
    });
});

我总是对异步方法感到困惑,只是无法理解它们是如何工作的......所以这段代码不起作用,因为它在 save() 调用完成之前就存在了。你会如何让它发挥作用?您将如何等待所有save()˙calls 并将Done! 打印到控制台?

谢谢!

【问题讨论】:

    标签: javascript node.js mongodb asynchronous promise


    【解决方案1】:

    Mongoose find 函数返回一个promise,你可以用它来创建链。 Promise.all 产生 Promise(或 Promise 和值的混合),遍历所有值并返回一个 Promise,当数组中的所有项都满足时,该 Promise 就满足了。

    var crypto = require('crypto');
    
    db.users
        .find({})
        .then(users => {
          var ops = users.map(user => {
           user.token = crypto.randomBytes(32).toString('hex');
           return user.save();
          });
          return Promise.all(ops);
        })
        .then(() => console.log('done'))
        .catch(err => console.log('error' + err));
    });
    

    【讨论】:

    • “=>”是什么意思?我会尽快尝试您的解决方案。
    • => 表示ES6 arrow function syntax。如果您使用 node.js 版本functions。
    • 非常感谢!完美运行。
    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多