之前一直用的mysql数据库,现在想学习下mongodb,安装还比较顺利,但是刚进行一个小的测试就来问题了,这让我这个mongodber小朋友情何以堪啊。好吧废话不多说了上测试的完整代码
var mongodb = require('./node_modules/mongodb');
var db_server = new mongodb.Server('localhost',27017,{safe:false});
var db_connector = new mongodb.Db('mydb',db_server,{safe:false});
db_connector.open(function(err, db){
if(err){
console.log(err);
}else{
db.collection('books',function(err, collection){
console.log("current collection is : " + collection.collectionName);
if(err){
console.log(err);
}else{
var cursor = collection.find();
cursor.count(function(err, count){
if(err){
console.log(err);
}else{
console.log("Total matches: " + count);
}
});
cursor.toArray(function(err, data){
console.log(data);
});
}
});
db.collectionNames(function(err, collections){
console.log("collections in mydb : ");
console.log(collections);
});
}
});
补上图:
mongodb里是有数据的:
为何查出来0条呢?是我代码哪里错了吗
var cursor = collection.find();
find是异步的,这里要使用回调函数或事件接收数据。
噢,多谢提醒。
现在放入回调里头 ,仍旧是Total matches:0,
collection.find({},function(err, cursor){
if(err){
console.log(err);
}else{
cursor.count(function(err, count){
if(err){
console.log(err);
}else{
console.log("Total matches: " + count);
}
});
}
});
你输出下collection.count,看是否有数据
var cursor = collection.find({}); 回调函数里面的参数确定是cursor吗?查下文档
你的集合名为什么前面有两个mydb? 我觉得你的第一次发的代码没有啥错误,是不是集合名字的问题?
我测试过你最初的那段代码,没有任何问题。输出的结果如下: current collection is : books Total matches: 1 [ { _id: 50d4128ffb69a2b09d2f373f, a: 1, b: 2 } ] collections in mydb : [ { name: ‘mydb.system.indexes’ }, { name: ‘mydb.books’ } ]
===========所以我在怀疑为什么你的集合名字多了一级
@hinode 没发现,汗! 我再看看
@hinode 没发现,汗! 我再看看
@hinode 我截图给你看我的操作:
这样子的,怎么集合多出一级出来了呢? 初学mongodb,有些概念和操作不是很清楚,多多指点指点
collection.count 是一个funciton,回调里的count也是0
@hinode 噢 ,终于搞明白了,use mydb后 db就是指向mydb, 然后只需要db.books.save(数据)就可以。 谢谢啦
谢谢热心回答,问题出在mongodb的操作上了,use mydb后,db已经指向了mydb,存数据的操作应该是db.books.save(数据), 我搞成了 db.mydb.books.save(数据),然后就多出了一级集合。