2012-11-15 225 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

相关问题