Dot运算符不提取Mongoose Document对象的子属性

时间:2014-01-15 04:55:19

标签: javascript node.js mongodb mongoose

console.log('>>>>>>user = '+ user);

输出

>>>>>>user      = { username: 'user1',
  salt: '3303187e50a64889b41a7a1c66d3d3c10b9dec638fdd033bee1221d30d01c5e1',
  hash: 'a174c206d88bee1594bb081dbd32d53420f6ef3d6322104f3d0722d58bc8dd8d',
  _id: 52d3177481daf59c11000001,
  __v: 0 }

但是

console.log('>>>>>>user.hash = '+ user.hash);

输出

>>>>>>user.hash = undefined

导致这种情况的原因是什么?


编辑:有趣的是,user._id,(和它)有效。

3 个答案:

答案 0 :(得分:3)

更新Solved in mongoose v3.8.19


这完全是一个猫鼬问题。

解决方案是不要无架构。我在定义模式时使用strict: false(用于使我的数据库模式更少)

var Users = mongoose.model('Users', new mongoose.Schema({
    },{strict:false}));

在这里添加hash解决了它。

var Users = mongoose.model('Users', new mongoose.Schema({
    hash: String
    },{strict:false}));

答案 1 :(得分:1)

我相信userobject并且要在JS中访问对象属性,请使用.表示法(属性访问者)。

在上面发布的代码中我可以看到,ID字段缺少'引号',

user = { username: 'user1',
         salt: '3303187e50a64889b41a7a1c66d3d3c10b9dec638fdd033bee1221d30d01c5e1',
         hash: 'a174c206d88bee1594bb081dbd32d53420f6ef3d6322104f3d0722d58bc8dd8d',
         _id: '52d3177481daf59c11000001',
         __v: 0 
     };

console.log(user.hash); // accessing hash property of `user` Object.

Working fiddle

答案 2 :(得分:0)

this回答中提示,您可以尝试将findOne参数更改为:

function(username, password, done){
    Users.findOne({username:new require('mongodb').ObjectID(username)}, function(err, user) {
        // do something here
    });
}

注意:{username: new require('mongodb')。ObjectID(用户名)}

基本上,您需要构建“用户名”,而不是将其作为字符串传递给findOne