我是Node / js / mongo的新手,如果我完全错了,请耐心等待。
我有一个本地db.js文件,它使用回调来为我提供Mongodb集合对象的上下文。 该对象有效,并且从我的回调调用find()会将游标返回到var游标,如预期的那样。但是,以下对findOne的调用将为err和res返回null。
如果我以类似的方式调用findOne,那么节点会抛出一个TypeError抱怨我没有传递给findOne的回调函数。
db.openDB(
function(err, db)
{
if(err)
{
console.log(err);
}
else
{
var cursor = db.find();
console.log(cursor);
db.findOne({},
function(err, res)
{
console.log(res);
});
}
});
为@JohnnyHK编辑:db.js 我现在注意到我打开了两次收集队列,但我还是迷路了,所以看看吧。
答案 0 :(得分:3)
尝试调用cursor.each()
并查看游标中是否存在实际内容。然后尝试在openDB函数中注释掉conn.close();
。我认为您在获取数据之前正在关闭连接。
也可以尝试
db = new mongodb.Db('test', server, {w:1}),
而不是排队'如果您使用的是默认数据库。
答案 1 :(得分:1)
我相信这个问题的答案可以帮到你:https://stackoverflow.com/a/24129547/3993375
FindOne()
不会返回Find()
之类的光标。
例如,如果您有一个空集合并使用Find()
,则计数为0。
如果您使用FindOne()
对空集合尝试相同操作,则会出现空错误。