2013-10-31 94 views
0

我的問題是我無法從我的mongodb數據庫中檢索數據......而且我不知道爲什麼。無法從集合中檢索數據

我可能做錯了什麼,這裏有一個小小的賭注,它不起作用。

var Db   = require('mongodb').Db, 
    Server  = require('mongodb').Server; 


var db = new Db('akemichat', new Server('localhost', 27017), {w:1}); 
db.open(function (err, p_db) { 
    db = p_db; 
}); 


db.collection('rooms', function (err, collection) { 
    if (!err) { 
     collection.find().toArray(function(err, items) { 
      items.forEach(function(room) { 
       console.log('hello'); // Never call... 
      }); 
     }); 
    } else { 
     console.log(err); 
    } 
}); 

請注意,我在我的數據庫有數據顯示如下

➜ akemichat git:(master) ✗ mongo 
MongoDB shell version: 2.4.7 
connecting to: test 
> use akemichat 
switched to db akemichat 
> db.rooms.find() 
{ "name" : "home", "_id" : ObjectId("527008e850305d1b7d000001") } 

感謝您的幫助!

注意:示例程序永遠不會結束,我也不知道爲什麼......也許是因爲連接永遠不會關閉,但如果我叫db.close()toArray回調,它永遠不會被調用,因爲回調從未happends。

+1

試着將你的集合'find'移動到''open''事件回調的回調函數中。 – WiredPrairie

回答

1

節點中的很多東西都是異步的。嘗試讀取收藏集後,您的連接已打開。

您應該在知道確切連接後查詢集合。 Down and dirty:

var Db   = require('mongodb').Db, 
    Server  = require('mongodb').Server; 


var db = new Db('akemichat', new Server('localhost', 27017), {w:1}); 
db.open(function (err, p_db) { 
    db = p_db; 

    db.collection('rooms', function (err, collection) { 
     if (!err) { 
      collection.find().toArray(function(err, items) { 
       items.forEach(function(room) { 
        console.log('hello'); // Never call... 
       }); 
      }); 
     } else { 
      console.log(err); 
     } 
    }); 
}); 

我在本地運行並接收到「hello」消息。此外,您的腳本永遠不會完成,因爲節點進程將運行直到它關閉或崩潰。這是設計。這也意味着你不必打開和關閉你的mongo連接。您可以在應用程序啓動時打開連接,並在關閉應用程序時關閉它。

+0

非常感謝。 – Nek