如何在NodeJs中手动更新多个Mongo文档?

我有一个在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(); }); }); 

我总是对asynchronous方法感到困惑,只是无法理解它们是如何工作的…所以这段代码在save()调用完成之前就不存在了。 你将如何使它工作? 你将如何等待所有的save() call并打印Done! 控制台?

谢谢!

Mongoose find函数返回一个promise,你可以用它来创build链。 Promise.all产生承诺(或承诺和值的混合),遍历所有的值,并返回一个承诺,当数组中的所有项目都履行完成。

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