点运算符不获取猫鼬文档对象的子属性

lag*_*lex 5 javascript mongoose mongodb node.js

console.log('>>>>>>user = '+ user);
Run Code Online (Sandbox Code Playgroud)

产出

>>>>>>user      = { username: 'user1',
  salt: '3303187e50a64889b41a7a1c66d3d3c10b9dec638fdd033bee1221d30d01c5e1',
  hash: 'a174c206d88bee1594bb081dbd32d53420f6ef3d6322104f3d0722d58bc8dd8d',
  _id: 52d3177481daf59c11000001,
  __v: 0 }
Run Code Online (Sandbox Code Playgroud)

console.log('>>>>>>user.hash = '+ user.hash);
Run Code Online (Sandbox Code Playgroud)

产出

>>>>>>user.hash = undefined
Run Code Online (Sandbox Code Playgroud)

什么可能导致这种情况?


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

lag*_*lex 4

更新在 mongoose v3.8.19 中解决


这完全是一个猫鼬问题。

解决方案是不要采用无模式。strict: false我在定义模式时使用(为了使我的数据库无模式)

var Users = mongoose.model('Users', new mongoose.Schema({
    },{strict:false}));
Run Code Online (Sandbox Code Playgroud)

添加hash到这里就解决了。

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