mongodb返回错误的密钥类型

时间:2012-07-28 16:17:34

标签: node.js mongodb express mongoose

我使用node.js + express + mongodb + mongoose,尝试通过自定义ID从数据库中检索用户,由于id值的数据类型不正确,页面返回完全为空,这是我的代码的一部分:

var User = new Schema({
  name: String , 
  email: String ,
  id: Number,
  role: String
});
var userModel = mongoose.model('User', User);
var person = new userModel();

function loaduser(req, res, next) {
  userModel.find({}, req.params.id, function(err, user){
    if (user){
      req.user = user;
      console.log(user);
      next();
    }
  })
  console.log(typeof req.params.id);
};

//personal page route
app.get('/user/:id', loaduser, function(req, res){
  res.render('show', { users: req.user });
});

然后在控制台中返回:

string
{ _id: 5012aa222c2d4d5876c5acd0,
    email: 'alex@mail.com',
    id: '0',
    name: 'alex',
    role: 'admin' },

即使我将id的类型声明为 Number ,它也会返回 String 。 欢迎任何建议:)

2 个答案:

答案 0 :(得分:0)

req.params.id似乎错了

userModel.find({}, req.params.id, function(err, user){


应该是

userModel.find({}, { id: parseInt(req.params.id) }, function(err, user){

答案 1 :(得分:0)

您的find电话不太正确。第一个参数应该是您的查询文档,因为您正在查找一个文档,所以您应该使用findOne。您还需要将req.params.id转换为数字:

userModel.findOne({ id: Number(req.params.id) }, function(err, user){

如果你仍然看到id以字符串形式返回时出现问题,那么它必须是集合中的字符串。