我连接到数据库并接收客户端。 下一步是创建一个集合(表)。
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);
});
答案 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