这是一个创建于 349 天前的主题,其中的信息可能已经有所发展或是发生改变。
{
其他属性...,
"arrayname":[
{ "_id" : "abc", "totalSaleAmount" : NumberDecimal("170")....更多属性 },
{ "_id" : "xyz", "totalSaleAmount" : NumberDecimal("150")....更多属性 }
]
}
比如修改 _id:abc 这条数据,由于前端表单提交传来的是全量数据,一个字段一个字段的去 update 太麻烦了,而且要写复杂的过滤出 abc 这条记录的条件,所以我想直接覆盖 abc 这条记录,有没有 update 语句能直接覆盖整条 abc 记录?
我现在的写法是 spring 的 mongotemplate 先 pull,再 push,这样就产生了两次与 mongo 的交互。
我知道把内嵌数组拆出来就不用写复杂的过滤条件了,但是相对于整个文档的查询来说,内嵌数组的更新相对频率较低
4 条回复 • 2021-08-24 10:23:06 +08:00
 |
|
2
ch2 349 天前
find_and_modify
|
 |
|
3
libook 349 天前 via Android
之前研究过这个问题,MongoDB 最小操作单位是 document,官方给出的建议是,如果希望频繁操作数组里的元素,最好拆成单独的集合……
|
 |
|
4
dumbbell5kg 348 天前
谢谢大家的回复,使用 mongodb 的$[<identifier>]和 arrayFilters 可以达到目的,代码如下: mongoTemplate.updateFirst(query(where("_id").is(id)), new Update().set("menuStakeholder.$[x]", data).filterArray(where("x.groupId").is(groupId)), xxx.class)
|