findOne与mongoskin和节点

时间:2014-12-17 01:47:16

标签: node.js mongodb mongoskin

我正在尝试(并且悲惨地失败)让一个使用mongodb的findOne函数。我遵循了这个教程(http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/)并且它工作正常,但是当我试图得到一个简单的findOne时,我遇到了这样的问题,有人可以帮帮我吗?我已经搜索过每一个教程,我知道你不能使用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);
});
});

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

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

db.ObjectID.createFromHexString(userToGet)

,你应该这样做:

ObjectID.createFromHexString(userToGet)

因为您在执行时已经声明了ObjectID变量:

ObjectID = require('mongoskin').ObjectID;

提示:永远不要在没有var语句的情况下声明变量(除非它真的是必要的),因为如果你这样做,它将在全局范围内。这样做:

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