gpt4 book ai didi

java - 如何使用 Spring+Mongo 更新和添加到子文档列表

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:01 25 4
gpt4 key购买 nike

我在 MongoDB 集合中有这样一个文档:

{
id : ...
listA:[{
id: ...,
thing:...,
listB:[{...},{...}]
},...
]
}

(顶级ID是正常自动生成的MongoDB ID。子文档对象的另一个ID是我单独生成并插入列表的伪ID)

问题:我想 (1) 添加到 listB 和 (2) 更改 thing

这个对象可能非常大,可能有多个线程在对象上操作,所以我想避免 findOne,更新,然后 save场景类型。

我想在 Spring Data 中以类似于我推送到 listA 的方式执行此操作,即

@Autowired
private MongoOperations operations;

public void addStuff(String id, Stuff stuff) {
operations.updateFirst(Query.query(Criteria.where("_id").is(id)),
new Update().addToSet("listA", stuff), Stuffs.class);
}

但是我在生成正确的查询/条件时遇到了问题。

提前致谢。

最佳答案

您应该尝试下一个查询:

final Query query = new Query(new Criteria().andOperator(
Criteria.where("_id").is("id"),
Criteria.where("listA").elemMatch(Criteria.where("_id").is("id"))
));

final Update update = new Update().addToSet("listA.$.listB", stuff).set("listA.$.thing", "thing");

final WriteResult wr = mongoOperations.updateFirst(query, update, "collectionName");

关于java - 如何使用 Spring+Mongo 更新和添加到子文档列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35669418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com