coをasync.parallel的に動かす
ちょっと時間がないのでさっくりと。
DBは毎度おなじみのMongoです。
コード
'use strict'; const co = require('co'); const MongoClient = require('mongodb').MongoClient; const MONGO_URL = 'mongodb://localhost:27017/test'; co(function* () { const filter = { _id: 'test-co' }; // CONNECT const db = yield MongoClient.connect(MONGO_URL); // REMOVE yield db.collection('test').removeMany({ _id: /^co793/ }); // UPDATE for (let i of ['a', 'b', 'c']) { const id = `co793-${i}`; const update = { $set: { _id: id, name: `なかむらco-${i}`, }, }; const opts = { upsert: true, }; yield db.collection('test').updateOne({ _id: id }, update, opts); } // FIND parallel const result = yield { a: db.collection('test').findOne({ _id: `co793-a` }), b: db.collection('test').findOne({ _id: `co793-b` }), c: db.collection('test').findOne({ _id: `co793-c` }), }; console.log(result); db.close(); }).catch((err) => { console.error(err.stack); });
ポイント
- yieldにオブジェクトを渡すとresultをオブジェクト形式で返せる。なお配列にすると配列で返る
- 本当はbulkWriteで一括で書き込むべきだし、findManyで一括で取得するべき。あくまでもこれはサンプル