From d0d55f2b5eec432d6aa320632285dd41de051e17 Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 27 Mar 2018 12:33:51 +0900 Subject: [PATCH] Fix bug --- .../node.1522066477.user-account-keypair.js | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/tools/migration/node.1522066477.user-account-keypair.js b/tools/migration/node.1522066477.user-account-keypair.js index effea137c..c413e3db1 100644 --- a/tools/migration/node.1522066477.user-account-keypair.js +++ b/tools/migration/node.1522066477.user-account-keypair.js @@ -1,14 +1,39 @@ +// for Node.js interpret + const { default: User } = require('../../built/api/models/user'); const { generate } = require('../../built/crypto_key'); +const { default: zip } = require('@prezzemolo/zip') -const updates = []; - -User.find({}).each(function(user) { - updates.push(User.update({ _id: user._id }, { +const migrate = async (user) => { + const result = await User.update(user._id, { $set: { - 'account.keypair': generate(), + 'account.keypair': generate() } - })); -}).then(function () { - Promise.all(updates) -}).then(process.exit); + }); + return result.ok === 1; +} + +async function main() { + const count = await User.count({}); + + const dop = Number.parseInt(process.argv[2]) || 5 + const idop = ((count - (count % dop)) / dop) + 1 + + return zip( + 1, + async (time) => { + console.log(`${time} / ${idop}`) + const doc = await User.find({}, { + limit: dop, skip: time * dop + }) + return Promise.all(doc.map(migrate)) + }, + idop + ).then(a => { + const rv = [] + a.forEach(e => rv.push(...e)) + return rv + }) +} + +main().then(console.dir).catch(console.error)