我有一个函数,试图从MongoDB中的设置集合中获取特定值。设置集合中包含设置值的设置对象标记为{'settings':'settings'}。架构是:
collection:setting
|--object
|--{'settings':'settings'}
|--{'valueA':'valueA'}
|--...
问题是当我第一次查询设置对象时,集合'settings'根本不存在。所以,
exports.getInstruments = function (callback) {
db.collection("settings", function(error, settings) {
settings.find({ "settings" : "settings" }), (function(err, doc) {
callback(doc.instruments);
});
]);
}
只是挂起并且不会调用回调。如果收集不存在,我应该返回“”或未定义,否则 - doc.instrumens。
答案 0 :(得分:9)
您可以使用exists()
函数来确定是否执行挂起的代码。
> db.getCollection('hello').exists()
null
> db.getCollection('world').exists()
{ "name" : "testdb.world" }
答案 1 :(得分:2)
您不需要专门处理新的收集案例,我认为问题在于您的代码。
除了一些语法问题,主要问题是find
将Cursor
传递给您的回调函数,而不是第一个匹配的文档。如果您只想要一个文档,则应使用findOne
代替。
这应该有效:
exports.getInstruments = function (callback) {
db.collection("settings", function(error, settings) {
settings.findOne({ "settings" : "settings" }, function(err, doc) {
callback(doc && doc.instruments);
});
});
};
答案 2 :(得分:0)
您可以利用显式创建集合的db.createCollection
:
> db.createCollection("asd")
{ "ok" : 1 }
> db.createCollection("asd")
{ "errmsg" : "collection already exists", "ok" : 0 }
根据ok字段检查命令是否成功。