猫鼬虚拟不工作

Bad*_*bee 3 mongoose node.js

我有一个 mongoose Schema 调用用户名,我试图在虚拟中连接用户名。当我在 get 中记录 virtual 或在这些模型中执行一个函数时,它返回 undefined。

我参考了文档,并且有示例嵌套模型,我更喜欢当前模型而不是嵌套它。我希望任何机构都可以在这方面帮助我。

const Schema = mongoose.Schema;
const UserSchema = new Schema({ 
firstname: {
type: String,
lowercase: true,
required: true
},
lastname: {
type: String,
lowercase:true,
text: true,trim: true,
required: true},
middlename: {
type: String,
text: true,trim: true,
lowercase: true
 }
  UserSchema.virtual('fullname')
.get(function(){
  return this.firstname + ' ' + this.lastname;
})
.set(function(firstname, lastname) {
  firstname = this.firstname;
  lastname = this.lastname;
});
UserSchema.set('toObject', {virtuals: true});
UserSchema.set('toJSON', {virtuals: true});
  });
  const User = module.exports = mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)

Ste*_*ado 13

尝试这个:

const Schema = mongoose.Schema
const UserSchema = new Schema({ 
  firstname: {
    type: String,
    lowercase: true,
    required: true
  },
  lastname: {
    type: String,
    lowercase:true,
    text: true,
    trim: true,
    required: true
  }
})

UserSchema.set('toObject', { virtuals: true })
UserSchema.set('toJSON', { virtuals: true })

UserSchema.virtual('fullname')
  .get(function() {
    return this.firstname + ' ' + this.lastname
  })
  .set(function(newName) {
    var nameParts = newName.split(' ')
    this.firstname = nameParts[0]
    this.lastname = nameParts[1]
  })

const User = module.exports = mongoose.model('User', UserSchema)
Run Code Online (Sandbox Code Playgroud)

然后你应该能够做到这一点:

var somebody = new User({
  firstname: 'Some',
  lastname: 'Body'
})

somebody.save(function(err, doc) {
  console.log(somebody.fullname) // Some Body

  doc.fullname = 'Another Person'

  doc.save(function(err, doc) {
    console.log(doc.fullname) // Another Person
  })
})
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。

  • 只是指出这一点:Moongose 5.8.11 不支持带有 getter(可能还有 setter)的箭头函数。 (4认同)

小智 6

我对虚拟也有同样的问题,返回“未定义”。我通过不使用箭头函数解决了这个问题(感谢@Bradyo 的评论)。所以 Mongoose 5.12.7 也不支持箭头函数。