2017-09-28 4 views
2

私はMongoDBインスタンスに接続し、いくつかのコードを返すために使用する次のコードを用意しています。カーソルの結果を繰り返し処理して、アプリケーションに適したデータ構造を作成する必要があります。しかし、私はテーブル配列の内容を呼び出し関数に返す方法を検討するのに苦労しています。私はテーブル変数を事前定義していますが、これは達成する必要があるものではありません。mongodbから配列を返すconnectとfind

findUsage関数を呼び出して、テーブル配列を呼び出してMongoClient.connectコードに戻すことはできますか?

const MongoClient = require('mongodb').MongoClient 
 
const assert = require('assert') 
 
const url = 'mongodb://localhost:27017/test' 
 

 
const table = [] 
 
const findUsage = function (db, callback) { 
 
    const cursor = db.collection('usage') 
 
     .find({ }, 
 
      {'customer': 1}) 
 
    cursor.each(function (err, doc) { 
 
     assert.equal(err, null) 
 
     if (doc != null) { 
 
      table.push(
 
       [doc.customer] 
 
      ) 
 
     } else { 
 
      callback(table) 
 
     } 
 
    }) 
 
} 
 

 
MongoClient.connect(url, function (err, db) { 
 
    assert.equal(null, err) 
 
    findUsage(db, function() { 
 
     //  console.log("Session: %j", table); 
 
     console.log(table) 
 
     db.close() 
 
    }) 
 
})

答えて

2

find cursorに対処する方法toArrayを使用してください。次に、データがあるかどうかにかかわらずcallbackを使用します。

 const findUsage = function (db, callback) { 
      const cursor = db.collection('usage') 
      .find({}, { 
       'customer': 1, 
      }); 

      cursor.toArray(function (err, docs) { 
      assert.equal(err, null); 

      if (docs) { 
       return callback(docs.map(x => x.customer)); 
      } 

      return callback([]); 
      }); 
     } 

     MongoClient.connect(url, function (err, db) { 
      assert.equal(null, err); 

      findUsage(db, function (docs) { 
      // ... 

      db.close(); 
      }); 
     }); 
+0

ありがとうございます。 'MongoClient.connect'呼び出しでどのようにデータにアクセスするのですか?例えばconsole.log(??)? – user1513388

+1

申し訳ありません、docs!例を正しく読まなかった。 – user1513388

関連する問題