搞了半天mongodb模块的使用,疑惑,求解。
发布于 2年前 作者 shaman 1270 次浏览

之前一直用的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);
         });
     }
});

补上图: enter image description here

mongodb里是有数据的: enter image description here

为何查出来0条呢?是我代码哪里错了吗

13 回复

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 我截图给你看我的操作: enter image description here

这样子的,怎么集合多出一级出来了呢? 初学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(数据),然后就多出了一级集合。

回到顶部