我在查询MongoDB时遇到错误:
var MongoClient = require('mongodb').MongoClient;
//assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
//assert.equal(null, err);
if(err)
throw err;
else{
console.log("Connected correctly to server");
var cursor = db.collection('documents').find({'_id':'01'});
cursor.forEach(function(err,doc) {
if(err){
throw err;
} else{
console.log(doc);
}});
db.close();
}});
我得到的错误就是这个。
process.nextTick(function(){ throw err;});
[object Object]
任何帮助表示赞赏!感谢。
答案 0 :(得分:0)
如果你使用nextObject()而不是forEach,你的代码应该做你想要的。
var MongoClient = require('mongodb').MongoClient;
//assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
//assert.equal(null, err);
if(err)
throw err;
else{
console.log("Connected correctly to server");
var cursor = db.collection('documents').find({'_id':'01'});
//CHANGE HERE
//cursor.forEach(function(err,doc) {
cursor.nextObject(function(err,doc) {
if(err){
throw err;
} else{
console.log(doc);
}});
db.close();
}});
更新:
当您在光标上执行forEach时,回调会将文档作为第一个参数。所以你的if是抓住并投掷它。这就是为什么你开始看到这个错误。 这是因为node-mongodb-native驱动程序的行为方式 检查此How can I use a cursor.forEach() in MongoDB using Node.js?
nextObject函数将为您提供两个参数,第一个是错误,第二个是doc。 https://mongodb.github.io/node-mongodb-native/api-generated/cursor.html#nextobject
答案 1 :(得分:0)
您的代码无效,因为您未向cursor.forEach
提供正确的回调,并且因为该方法是异步的,因此您正在调用db.close()
在您实际获取文档之前。
但是,因为您要查询单个文档,所以可以使用findOne
代替,这样可以消除处理find
返回的游标的复杂性:
MongoClient.connect(url, function(err, db) {
if(err)
throw err;
else {
console.log("Connected correctly to server");
db.collection('documents').findOne({'_id':'01'}, function(err, doc) {
if(err){
throw err;
} else{
console.log(doc);
}
db.close();
});
}
});