例如,我有一个如下的架构。
const packSchema = new mongoose.Schema({
company: [
name: {type: String},
realName: {type: String, default: ''}
]
})
所以我可以按以下方式保存JSON数据。
[{
"name": "abc",
"realName": "efg"
}]
但是,当数据没有realName时,我希望realName从自己的名字获取数据。
例如,我从ajax调用中请求此数组,
[{
"name": "KA"
},
{
"name": "MC"
}]
当我保存该对象时,在mongoDB中的结果如下。
[{
"name": "KA",
"realName": "KA"
},
{
"name": "MC",
"realName": "MC"
}]
我认为解决方案在架构中使用“设置”选项。
function duplicate(){
}
const packSchema = new mongoose.Schema({
company: [
name: {type: String},
realName: {type: String, set: duplicate}
]
})
但是我不知道如何从他自己的数组元素中获取“名称”数据。
我应该使用“ for”循环吗?还是有其他解决方案?
谢谢您阅读。
答案 0 :(得分:1)
函数内部的this
将绑定到您正在创建的对象。结果,您将可以使用:
function duplicate(v){
return v === undefined ? this.name : v;
}
以上,如果realName
(即:v
)的值未定义,那么您将返回this.name
,即您所对象的name
重新插入/创建。否则,如果已经设置了realName
,它将使用该值。
答案 1 :(得分:0)
将公司转换为子模式,并使用预保存钩子更新真实姓名
const companySchema = mongoose.Schema({
name: String,
realName: String
})
companySchema.pre('save',function(next) {
if(!this.realName)
this.realName = this.name
next();
})
const packSchema = mongoose.Schema({
company: [companySchema]
})
const Pack = mongoose.model('Pack', packSchema);