我有这个包含'hardcoded'子文档的Mongoose模型架构 我无法弄清楚如何将_id重命名为子文档的id。
对于父级我使用以下代码来包含id prop,但这似乎不适用于子文档。
menuItemSchema.set('toJSON', {
virtuals: true
})
我尝试了什么:
menuItemSchema.set('toJSON', {
virtuals: true,
extras: { // <-- child
virtuals: true,
}
})
模式
const menuItemSchema = mongoose.Schema({
name: {
type: String
},
extras: [{ // <-- child
name: {
type: String
},
...otherProps
}],
...otherProps
})
menuItemSchema.set('toJSON', {
virtuals: true
})
有办法吗?我是否需要创建一个单独的模式才能启用
.set('toJSON', { virtuals: true })
结果
{
"_id": "5b2691666034483916a59fe8",
"name": "Margharita",
"extras": [
{
"_id": "5b2691666034483916a59fed",
"name": "Sauce"
// ^ got no id
},
...
],
"__v": 0,
"id": "5b2691666034483916a59fe8" // <- got id
}
答案 0 :(得分:1)
toJSON
/ toObject
不接受选项extras
,它对架构不执行任何操作。 Reference
默认情况下,Mongoose文档将具有id
虚拟getter。 Refercence
尝试明确定义子模式:
const ExtraSchema = new Schema({...});
const menuItemSchema = new Schema({
extras : [ExtraSchema]
});
如果这不起作用,请尝试transform
中的toJSON
选项:
ExtraSchema.set('toJSON', {
transform : (doc, result) => {
return {
...result,
id : result._id
};
}
});