javascript - Mongoose remove a Schema property after creating virtual property
问题描述
I am creating a groupedMenu
virtual property that replaces the need for my menu
property.
So once I am done mapping my virtual property, I want to delete the menu key in my Schema.
Example Schema:
new Schema({
menu: [{
category: String
}]
})
Example virtual category being created:
Restaurants.virtual('groupedMenu')
.get(function () {
return _.groupBy(this.menu, menu => menu.category);
});
I've tried deleting the menu in my route, but it does not work. Example:
router.get('/someRoute', function (req, res) {
Schema.findOne({})
.then(menuStuff => {
delete menuStuff.menu // THIS DOES NOT WORK
return res.status(200).json(menuStuff);
})
How can I delete my menu
key after my my virtual property groupedMenu
has been created?
解决方案
我看到的问题很少。
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());
推荐阅读
- javascript - 箭头功能:我无法访问外部对象
- java - React Native Android Intent putExtra obj ReadableMap 如何恢复对象
- android - 每次更新都会下载 OBB 扩展文件,即使它没有改变?
- flask - 阿帕奇,ugswi,烧瓶,通信问题
- excel - 如何在选择更改时切换单元格颜色
- c# - 如何通过使用 DateTime 列和变量月、年的查询来填充包含记录的数组
- r - R中的二维随机级数
- javascript - 本地未声明的变量成为全局变量。它们在文档中的什么位置结束?
- python - 如何从 pymongo 字段中的所有值创建一个列表?
- java - 无法使用扫描仪类从静态块读取输入