如何获取不属于猫鼬模式的字段

时间:2020-05-09 22:11:33

标签: javascript node.js mongodb web mongoose

在我的数据库中,有时候我需要为要添加的文档添加一个字段,我使用了{strict: false} 在我的模式中是这样的: const mySchema = mongoose.Schema({name: String, description: String}, { strict: false });,并且可以很好地与添加一起使用,但是在获取要具有此新值的记录时出现了问题,我无法使用此字段并且显示未定义,这是一个示例:

让我说这样的记录:

myModul.insertMany([{name: 'test', description: 'test description', auto: true}], (error, docs) {});

并且由于{ strict: false }的原因而被添加

现在,当我想获取该记录时,我将使用此记录:

myModul.findOne({name: "test"}, (err, found)=>{
  console.log(found);
  console.log(found.auto);
});

第一个console.log显示记录中的字段,但是当我要记录或专门使用该字段时,它表示未定义

1 个答案:

答案 0 :(得分:0)

从猫鼬的角度来看,如果要获取不在架构中的字段,则必须执行instance.setinstance.get。这是一个示例:

let func = async () => {
  let instance = new Model()
  instance.fieldOne = 'abc'
  instance.set('fieldTwo', 'def')
  await instance.save()

  let instance2 = await Model.findOne({_id: instance._id})

  console.log(instance2.fieldOne)
  console.log(instance2.get('fieldTwo'))
  // Has `fieldTwo`
  console.log(instance2.toObject())
}

您可以结帐更多here

因此,您的情况将是:

myModul.findOne({name: "test"}, (err, found)=>{
  console.log(found);
  console.log(found.get('auto'));
});