2017-02-11 8 views
0

mongoDBデータベースからデータを取得するのにnode.jsサーバーで作業していますが、扱いにくいですし、以前は使用したことがないために約束を使用したいと思っています。コードをクリーンアップすることもできます。私はノードにbluebirdモジュールを使用してmongodbを約束しており、現在1つのアイテムを見ることができます。promised mongodbを使用して複数の文書を検索する

var client = MongoClient.connectAsync('mongodb://localhost:27017/stockData') 
.then(function(db) { 
    return db.collection("stockData").findOneAsync({ High: 253.41796296683228 }) 
}) 
.then(function(doc) { 
console.log(doc) 
}) 
.catch(function(err) { 
    console.log(err) 
}); 

しかし私は、しかし、私はトラブル全部のまわりで私の頭をラップを抱えているとの約束を使用するために、ここでこのコードのチャンクを変換したいカーソルを使用して複数のドキュメントをループできるようにしたいと思います。

MongoClient.connect(url, function(err,db){ //set up connection to mongodb takes two parameters a url for the db and a callback function 

     assert.equal(err,null) //check to see if there any errors connecting to the database 
     var cursor = db.collection('stockData').find().limit(10) // cursor will be an array of objects retrieved from the database 
     cursor.forEach(function(doc, err){ //loop through the cursor 
      assert.equal(null,err) //check for errors 
      console.log(doc) 
     }, function(){ 
      db.close(); //close the database once the query is finished 
     }); 
    }); 

この問題は、何が起こっているのか説明できれば、私はそれをうまくやることができます。

答えて

0

これは私がそれを行うだろうかです:

var Promise = require('bluebird'); 
var MongoClient = Promise.promisifyAll(require('mongodb')); 

MongoClient.connectAsync('mongodb://localhost:27017/test') 
    .then(function (db){ 
    return db.collection('stockData').find({}, { limit: 10 }).toArrayAsync() 
     .then(function (docs) { 
     if (docs.length > 0) { 
      docs.forEach(function(doc) { 
      console.log(doc); 
      }); 
     } 
     }) 
     .catch(function (err) { 
     console.log(err); 
     }) 
     .finally(function() { 
     db.close(); 
     }) 
    .catch(function (err) { 
    console.log(err); 
    }); 
}); 
+0

あなたは '.connectAsyncは()' '関数(errは、デシベル)'関数を続けていることは本当によろしいですか?それはまさに典型的なことではない約束のようなものです。 – Tomalak

+0

私はそれをあなたの方法で試してみましたが、約束が拒否されたまま返ってきて、dbパラメータが定義されていません –

+0

大変申し訳ありません。私は今それを更新しました。 @CraigHyland –

関連する問題