findOne与mongoskin和节点

我正在尝试(并失败)得到一个MongoDB的findOne函数。 我遵循这个教程( http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/ ),它工作正常,但是当我试图得到一个简单的findOne去我有有这样的问题,有人可以帮我吗? 我已经search了每个教程,我知道你不能只使用findone({_ id:“idnumber”}),但我不知道我的错在哪里:

router.get('/userlist/:id', function(req, res) { db = req.db; ObjectID = require('mongoskin').ObjectID; var userToGet = req.params.id; db.collection('userlist').findOne({_id: db.ObjectID.createFromHexString(userToGet)}, function(err, result) { console.log(result.username); }); }); 

我得到错误“不能调用未定义的方法'createFromHexString',我应该在哪里需要我的mongoskin.objectid?

我findall完美的作品:

 router.get('/userlist', function(req, res) { db = req.db; db.collection('userlist').find().toArray(function (err, items) { res.json(items); }); }); 

任何帮助将不胜感激。

你的问题是,当你这样做:

 db.ObjectID.createFromHexString(userToGet) 

,你应该这样做:

 ObjectID.createFromHexString(userToGet) 

因为您在执行时已经声明了ObjectIDvariables:

 ObjectID = require('mongoskin').ObjectID; 

提示:不要声明一个没有var语句的variables(除非真的有必要),因为如果你这样做的话,它会在全局范围内。 做这个,而不是:

 var ObjectID = require('mongoskin').ObjectID;