问题
Node.js MongoDB库始终为collection.count({})
返回undefined。这个问题已被多次发布和回答,我一定会查看以前的所有解决方案,但似乎都没有,我总是未定义。
作为问题的背景,我正在制作一个Job Automator,在添加新作业之前,我想确保数据库中已经存在0条记录,这些记录与正在添加的新作业具有相同的名称(即名字是独一无二的)。 编辑:在某些情况下,我确实希望允许重复,因此我不希望在数据库级别使用索引和禁用重复项。
代码
在这种情况下,console.log()
内的count
只打印未定义。在这种情况下,我在调试时放入了一个空的查询字符串(当前没有测试名称冲突)。
add: function(io, newJob)
{
//mc is where require('mongodb').MongoClient is saved
//connectionString contains a valid connection string
//activeCollection contains the name of the collection
//(I am sure mc, connectionString and activeCollection are valid)
//I know this as I have used them to insert documents in previous parts
mc.connect(connectionString, function(err,db)
{
if(err)
throw err;
else
{
db.collection(activeCollection, function(err,collection)
{
if(err)
throw err;
//Start of problematic part
//See also "What I've tried" section
collection.count({},function(err,count)
{
console.log(count);
});
//End of problematic part
//Omitting logic where I insert records for brevity,
//as I have confirmed that works previously.
});
}
db.close();
});
}
我尝试了什么
我已阅读上述问题,并使用以下块替换了上一代码块中//Start of problematic part
和//End of problematic part
之间的内容:
完全断开回调(也打印undefined):
function countDocs(callback)
{
collection.count({},function(err, count)
{
if(err)
throw err;
callback(null, count);
}
}
countDocs(function(err,count)
{
if(err)
throw err;
console.log(count);
});
我甚至尝试过我认识不起作用的东西
var count = collection.count({});
新(1/28/16)
我没有检查count()
中的错误,这有点草率,所以我在if(err)console.log(err);
块中添加了count()
,结果错误是:
{ [MongoError: server localhost:27017 sockets closed]
name: 'MongoError',
message: 'server localhost 27017 sockets closed' }
我真的不明白,因为在代码的其他部分,我能够使用相同的connect()和collection()调用,并且可以很好地插入数据库。基于此的任何见解?
非常感谢任何帮助!
答案 0 :(得分:1)
让我们来处理问题的意图:
我正在制作Job Automator,在添加新作业之前,我想 确保数据库中已存在0条记录 与要添加的新作业相同的名称(即名称是唯一的)。
而不是通过javascript,只需在名称键上set a unique index。在蒙戈:
db.collection.ensureIndex( { name: 1 }, { unique: true } )
然后,当您插入文档时,请使用try / catch块来捕获任何创建具有重复名称的文档的尝试。
答案 1 :(得分:0)
您可以使用collection.find().toArray(function(err,documents) { ...});
,如果没有与您的查询匹配的文档,则会返回一个空数组。检查数组的length
属性应该等同于count()
尝试实现的属性。
文档中的更多信息:https://mongodb.github.io/node-mongodb-native/api-generated/cursor.html#toArray