如何在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)); });