あいつの日誌β

働きながら旅しています。

mongoDB の stream example

mongoDB の stream を使おうとしてサンプルコードを探すと意外と見つからないのでメモ

var MongoClient = require('mongodb').MongoClient;

function getIds (db, callback) {

  var condition = {}; // something

  var stream = db.collection('userActionLog').find(condition, {userId:1}).stream();
  
  stream.on('error', function (err) {
    db.close();
    return callback(err);
  });  

  var seen = {},
  var ids = [];
  
  stream.on('data', function (doc) {
    if (!seen[doc.userId]) {
      seen[doc.userId] = true;
      ids.push(doc.userId);
    }
  });  
  
  stream.on('close', function () {
    db.close();
    return callback(null, ids);
  });  
}

// Connection URL
var url = 'mongodb://localhost:27017/sample';
MongoClient.connect(url, function(err, db) {

  console.log("Connected correctly to server");

  getIds(db, start, end, function(err, userIds) {
    console.log(err, userIds);
  });

});

ids.push しているのは userId が数値型を想定。文字列だったら以下で導きす事も可能だとおもいますがpush するとの keys を取り出すのはどっちが効率いいのか調べてないです。

    // return callback(null, ids);
    callback(null, Object.keys(seen));