首页 > 解决方案 > Mongoose virtual 正在为该字段提供未定义的响应

问题描述

我有一个用例,我需要在保存之前修改一个字段,并在我得到它时修改回来。我正在使用猫鼬虚拟来做到这一点。这是我的代码。

const newSchema = new Schema({ ip: String });
newSchema.virtual('ipAddress')
  .get(function(){ return ip.fromLong(this.ip) })
  .set(function(v) { this.ip = ip.toLong(v) });

当我打电话时model.create({ ipAddress: '255.255.255.255' }),ip 是未定义的。我尝试this.ip在设置器中分配一个硬编码的值,即使它是未定义的。我在流程中遗漏了什么吗?

标签: node.jsmongoose

解决方案


您不能使用输入数据创建与模型模式不同的内容(虚拟字段未存储在 MongoDB 中)。以下官方文档:

var IPModel = mongoose.model('IPTableName', newSchema);
var obj = new IPModel({
    ip: ''
});
obj.ipAddress = '255.255.255.255'; // call setter
obj.save();

推荐阅读