如何用Mongoose+TypeScript为MongoDB嵌套对象追加属性而非替换?
给MongoDB嵌套对象追加新属性
你需要用点符号指定嵌套对象中的具体属性,这样$set只会更新目标属性,不会替换整个ck_details对象。
错误写法会直接覆盖ck_details:
TenantModel.updateOne({ tenant_id: 'tenantId' }, { $set: { ck_details: { appId } } })
正确写法,通过ck_details.appId定位到嵌套属性:
TenantModel.updateOne( { tenant_id: 'tenantId' }, { $set: { 'ck_details.appId': appId } } )
执行后,原文档的ck_details会保留leadId和refNum,同时新增appId属性,最终结构如下:
{ _id: ObjectId('XXX'), tenant_id: 'tenantId', ck_details: { leadId: '', refNum: '', appId: '你的appId值' } }
如果目标文档不存在,想要自动创建的话,可以加上upsert: true选项:
TenantModel.updateOne( { tenant_id: 'tenantId' }, { $set: { 'ck_details.appId': appId } }, { upsert: true } )
内容的提问来源于stack exchange,提问作者Rupen
相关产品推荐
相关产品推荐

