通过mongoDB集合查询需要什么?

时间:2015-02-27 03:08:22

标签: javascript node.js mongodb

我在Ubuntu上运行mongoDB。我有一个名为'临时'的数据库。在该数据库中,我有一个名为'questions'的集合。

在命令行中使用mongo我能够成功地将对象插入到'questions collection'中。到现在为止还挺好。我的下一步是用JavaScript编写一个程序,该程序将运行并向集合中插入更多对象。这很好,我能够连接到我的收藏并添加更多。

现在我在这里遇到问题。在JavaScript程序中,我想查询并从我的'questions'集合中检索某些数据。我的代码如下所示:

var mc = require('mongodb').MongoClient;
//connect to database
db = mc.connect('mongodb://localhost/temporary', function(err,db){
    var myCollection = db.collection('questions');
    var newArray = myCollection.find().toArray();
    db.close();
}

我相信我正确连接到我的收藏集,因为这是我连接它以添加条目的方式。我的问题是find()方法和toArray()方法。

从我的理解find()让我搜索我的集合并最终返回一个称为游标的东西。我想使用toArray()将对象放入一个数组中。

问题是这行给了我一个错误:

var newArray = myCollection.find().toArray();

错误显示“错误:回调是必需的”。所以我最终搜索并找到了这个网站:http://mongodb.github.io/node-mongodb-native/api-articles/nodekoarticle1.html

从那里我决定尝试:

 var newArray = myCollection.find().toArray(function(err, items){
     if(err){ console.log("An error occured");}});

有了这个,我不断收到“发生错误”,打印出来。有谁知道问题可能是什么?显然使用toArray()方法,但我不知道错误的原因是什么。我觉得我的代码现在几乎只是裸露的骨头而且我不能为我的生活弄清楚我做错了什么。

为了澄清,当我只是单独执行find()方法时,我没有得到任何错误,但由于某种原因,添加.toArray()会破坏我的代码。我想也许是因为我的find()调用有参数,但即使搜索我知道在集合中的对象,我也会得到相同的错误,所以不是那样。

我正在连接我的数据库。我创建了一个已经存在的集合“问题”,并且插入了对象。我使用find()进行查询,尝试将对象检索到数组中,然后我想关闭数据库。

2 个答案:

答案 0 :(得分:0)

您可以尝试重构并测试您的代码,如下所示:

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,    
    assert = require('assert');

var db = new Db('temporary', new Server('localhost', 27017));
// Establish connection to db
db.open(function(err, db) {    
    var myCollection = db.collection('questions');
    // Retrieve all the documents in the collection
    myCollection.find().toArray(function(err, documents) {
          if(err){ console.log("An error has occurred"); }
          assert.equal(1, documents.length);
          db.close();
    });
});

答案 1 :(得分:-2)

变化

我希望这对你有帮助..

   MongoClient.connect("mongodb://localhost:27017/temporary", function(err, db) {
        var myCollection = db.collection('questions');
         myCollection.find().toArray(function(err,resu)
                            {
                                    console.log(resu);
                 }
);