找不到节点js集合中的mongodb

时间:2014-02-11 10:16:00

标签: node.js mongodb

我连接到数据库并接收客户端。 下一步是创建一个集合(表)。

db.createCollection("test", function(err, collection){    //I also tried db.collection(...
    if(collection!=null)
    {   
        collection.insert({"test":"value"}, function(error, model){console.log(model)});
    }
    else if(err!=null)
        console.log(err);
});

现在我已经创建了一个集合“test”以及一个文档(行)“test”。

接下来是获取集合的内容:

db.test.find({});    //An empty query document ({}) selects all documents in the collection

这里我得到错误:无法调用undefined的“find”。那么,我做错了什么?

编辑:我以这种方式连接到数据库:

var mongoClient = new MongoClient(new Server("localhost", 27017, {native_parser:true}));
mongoClient.open(function(err,mongoclient){
if(mongoclient!=null)
{
    var db = mongoclient.db("box_tests");
    startServer(db);
}
else if(err!=null)
    console.log(err);
});

2 个答案:

答案 0 :(得分:2)

在mongo命令行中你可以使用db.test.find({})但是在javascript中到目前为止无法复制该接口(可能某天有和声代理)。

因此它会抛出错误无法调用未定义的“查找”,因为db中没有测试

mongodb的node.js驱动程序的api是这样的:

db.collection('test').find({}).toArray(function (err, docs) {
  //you have all the docs here.
}); 

另一个完整的例子:

//this how you get a reference to the collection object:
var testColl = db.collection('test');

testColl.insert({ foo: 'bar' }, function (err, inserted) {
  //the document is inserted at this point.

  //Let's try to query
  testColl.find({}).toArray(function (err, docs) {
    //you have all the docs in the collection at this point
  }); 
}); 

还要记住,mongodb是无架构的,您不需要提前创建集合。很少有特定的案例,比如创建一个上限集合和其他几个。

答案 1 :(得分:1)

如果在db.createCollection块之后调用db.test.find“next”,它将在db.createCollection成功之前立即紧接着。所以在这一点上,db.test是未定义的。

请记住该节点是异步的。

为了得到我相信你期望的结果,db.test.find必须在你调用console.log(model)的collection.insert回调中。

db.createCollection("test", function(err, collection){   
    if(collection!=null)
    {   

        // only at this point does db.test exist

        collection.insert({"test":"value"}, function(error, model){
            console.log(model)

            // collection and inserted data available here
        });
    }
    else if(err!=null)
        console.log(err);
});

// code here executes immediately after you call createCollection but before it finishes

签出节点async.js模块。好写在这里:http://www.sebastianseilund.com/nodejs-async-in-practice