我正在创建一个groupedMenu
虚拟属性,以取代对我的menu
属性的需求。
因此,一旦我完成了虚拟属性的映射,我想删除架构中的菜单键。
示例架构:
new Schema({
menu: [{
category: String
}]
})
正在创建的虚拟类别示例:
Restaurants.virtual('groupedMenu')
.get(function () {
return _.groupBy(this.menu, menu => menu.category);
});
我已经尝试删除路线中的菜单,但是它不起作用。示例:
router.get('/someRoute', function (req, res) {
Schema.findOne({})
.then(menuStuff => {
delete menuStuff.menu // THIS DOES NOT WORK
return res.status(200).json(menuStuff);
})
创建虚拟属性menu
后,如何删除groupedMenu
键?
答案 0 :(得分:0)
我看到的几个问题。
Schema.findOne({})
看起来很奇怪。应该是Model.findOne({})
。
virtual
的同义词是getter
。这意味着,当您调用object.groupedMenu
时,虚拟方法将被执行。换句话说,每次调用groupedMenu
时menu
都在使用.groupedMenu
。 未创建虚拟属性,它们始终在运行时执行。
我的建议是覆盖Schema.toObject
,使其不包含.menu
Schema.set("toObject", {
virtuals: true,
transform(doc, ret) {
ret.id = ret._id;
delete ret.menu;
}
});
并在您的代码中使用它:
return res.status(200).json(menuStuff.toObject());