我有一个REST api客户端,我发送和接收mongoose文档作为普通对象,通过JSON序列化。文档不是太复杂,但包含嵌入的对象和数组,如:
var doc = mongoose.Schema({
doc_info: {
current: { type: Boolean, required: true, default: true },
edited_by: { type: ObjectId, ref: 'User' },
create_date: { type: Date, required: true, default: Date.now() },
save_date: { type: Date, required: true, default: Date.now() },
prev_versions: [{type: ObjectId, ref: 'DOC'}]
},
ix_info: {
runid: { type: String, required: true },
agency_id: {type: Number, required: true},
agency_ref: {type: ObjectId, ref: 'Agency'},
run_times:{
recd: Date
}
} ... }
当我从客户端收到文档时,它只是一个部分文档,因为很多东西都没有从存储的文档中发送给它。在上面的代码段中,doc_info部分不会发送到客户端。当我从客户端收到一个对象时,我需要将文档与更新的对象合并。我从客户端获取的对象中的所有内容都在文档的模式中定义,但它不是一个完整的文档,我不必知道对象中的文档属性,它可以是一个,一些,或许多。
我尝试使用_.extend,但这导致任何属性都是数组或嵌套对象,而不是从文档中删除接收到的对象。在上面的示例模式中,使用_.extend(doc, newObj)
时会删除pcr_info.prev_versions。有没有办法盲目地扩展我的文档与对象而不删除源对象中没有的东西?这被认为是一个深度合并'或者'深拷贝'问题