在开发API时,我通常需要在mongoDb查询结果中设置额外的属性。但我做得不好。例如
模型
const Cat = mongoose.model('Cat', { name: String,age:Number });查询
Cat.findOne({age:2}) .then(
cat=>{
cat.breed="puppy";
console.log(cat)
} )在这里,在我从mongoDb获得结果之后,我想将的属性设置为结果,但是我不能这样做,因为该属性没有在模式中定义
因此,为了设置额外的属性,我使用了一个hack
cat = JSON.parse(JSON.stringify(cat));
cat.favFood = "Milk"我不认为这是编码的好方法。请给出更好的设置属性的方法,并解释黑客是如何工作的。
发布于 2019-03-03 16:59:06
猫鼬实际上可以使用toObject选项为您执行转换.lean()。这比查询后的手动转换(正如威利斯提到的那样)更可取,因为通过跳过从DB到mongoose对象的原始Mongo文档的所有转换,从而优化了猫鼬查询,从而使文档成为一个普通的Javascript对象。因此,您的查询将类似于以下内容:
Cat.findOne({age:2}).lean().then(
cat=>{
cat.breed="puppy";
console.log(cat)
}
)结果将是相同的,但这将跳过蒙鹅文档到对象转换中间件。但是,请注意,当您使用.lean()时,丢失了像.save()或.remove()这样的Mongoose文档类方法(),因此,如果您需要在查询后使用其中的任何方法,则需要遵循威利斯答案。
https://stackoverflow.com/questions/54970920
复制相似问题