2012-11-15 224 views
3

我有一個函數,試圖從MongoDB中的設置集合中獲取特定值。包含設置值的settings對象的標記是{'settings':'settings'}。模式是:NodeJS + Mongo native - 檢查查詢之前是否存在集合

collection:setting 
|--object 
    |--{'settings':'settings'} 
    |--{'valueA':'valueA'} 
    |--... 

問題是當我第一次查詢設置對象,集合的'設置'根本不存在。所以,

exports.getInstruments = function (callback) { 
db.collection("settings", function(error, settings) { 
    settings.find({ "settings" : "settings" }), (function(err, doc) { 
      callback(doc.instruments); 
    }); 
]); 
} 

只是掛起和回調不會被調用。如果收集不存在,我應該返回「」或undefined,否則 - doc.instrumens。

回答

2

你應該不需要特別處理新的集合案例,我認爲問題在於你的代碼。

除了一些語法問題,主要問題是find將傳遞給您的回調函數,而不是第一個匹配的文檔。如果您只需要一個文檔,則應該使用findOne

這應該工作:

exports.getInstruments = function (callback) { 
    db.collection("settings", function(error, settings) { 
     settings.findOne({ "settings" : "settings" }, function(err, doc) { 
      callback(doc && doc.instruments); 
     }); 
    }); 
}; 
0

你可能利用db.createCollection的其中明確創建了一個集合:

> db.createCollection("asd") 
{ "ok" : 1 } 
> db.createCollection("asd") 
{ "errmsg" : "collection already exists", "ok" : 0 } 

只是檢查命令成功基礎上,確定現場。

9

有,你可以用它來確定是否要執行該掛起代碼的存在()函數。

> db.getCollection('hello').exists() 
null 
> db.getCollection('world').exists() 
{ "name" : "testdb.world" } 
+0

'let col = db.collection('foo'); console.log(col.exists())'返回col.exists不是函數。這在mongodb native driver 2.2.25中有效嗎? – Kunok

相關問題