以下是代码
var mongo = require('mongodb');
var databaseName = 'Starter',
collectionName = 'wines';
var Server = mongo.Server,
Db = mongo.Db,
BSON = mongo.BSONPure;
db = new Db(databaseName, server);
db.open(function(err, db) {
if(!err) {
console.log("Connected to 'winedb' database");
db.collection(collectionName, {strict:true}, function(err, collection) {
if (err) {
console.log("The 'wines' collection doesn't exist. Creating it with sample data...");
populateDB();
}
});
}
});
exports.findById = function(req, res) {
var id = req.params.id;
console.log('Retrieving wine: ' + id);
db.collection(collectionName, function(err, collection) {
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {
res.send(item);
});
});
};
这些代码基于使用mongoDB的nodejs的restful api示例。
但是,它似乎无法识别函数findOne
。有人可以指出问题吗?
错误讯息:
TypeError: Cannot read property 'findOne' of undefined
答案 0 :(得分:1)
最新版本的mongodb@2.x 中不推荐使用
findOne
https://github.com/mongodb/node-mongodb-native/blob/2.0/lib/collection.js
您可以使用此查询
find(query).limit(1).next(function(err, doc){
// handle data
})
答案 1 :(得分:0)
您在名为collectionName
的变量中表示您的集合,并且您尝试在名为collection的内容上调用findOne()
。
而不是:
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item)
使用:
collectionName.findOne({'_id':new BSON.ObjectID(id)}, function(err, item)
答案 2 :(得分:0)
将代码的开头更改为
var mongo = require('mongodb');
mongo.BSONPure = require('bson').BSONPure;
var databaseName = 'Starter',
collectionName = 'wines';
var Server = mongo.Server,
Db = mongo.Db,
BSON = mongo.BSONPure;
答案 3 :(得分:0)
使用此
collection.findOne({'_id':new mongo.ObjectID(id)}, function(err, item) {
而不是
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {
在您的wine.js
文件中
答案 4 :(得分:0)
在使用findOne或将整个事物包装在:
之前,尝试将集合记录到控制台 if(err){log}
else{findone}
if(err){
console.log(err)
}
else{
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item){
res.send(item);
}}
它无效的原因是因为错误优先回调函数中的collection
是操作成功时分配的参数...
答案 5 :(得分:-1)
在第一个db.collection
中,您发送3个参数,如:
db.collection(collectionName, {strict:true}, function(err, collection)
你只发2:
db.collection(collectionName, function(err, collection)
这应该是你的问题。