如何使用 MongoDB 和 Spring 的存储库更新列表?
Posted
技术标签:
【中文标题】如何使用 MongoDB 和 Spring 的存储库更新列表?【英文标题】:How do I update a list using MongoDB and Spring's repository? 【发布时间】:2021-12-15 07:24:27 【问题描述】:我有如下文件:
myDocument:
_id: (Auto-generated)
someField: "Hello world",
targetField: ["Steve", "Bill"]
另外,我有一个这样的存储库:
@Repository
public interface FooRepository extends MongoRepository<MyDocument, String>
我的问题是:“如何在 targetField 中添加新数据而不在本地找到它?因为如果我的列表太大,我不想加载它,而只是插入里面有新的东西。”
谢谢。
【问题讨论】:
【参考方案1】:spring data mongodb
使用 MongoTemplate
、Query
和 Update
Update.addToSet
将项目添加到集合(不可复制)
Update.push
将项目附加到数组(可复制)
import org.springframework.data.mongodb.core.*;
@Autowired
MongoTemplate mongoTemplate;
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(idToUpdate));
Update update = new Update();
update.addToSet("targetField", "newValue");
mongoTemplate.updateFirst(query, update, "collectionName");
获取结果文档,使用FindAndModifyOptions
FindAndModifyOptions options = FindAndModifyOptions.options()
.returnNew(true);
TargetClass result = mongoTemplate.findAndModify(query, update, options, TargetClass.class, "collectionName");
添加多个值
update.addToSet("targetField")
.each("value1", "value2");
update.push("targetField")
.each("value1", "value2");
删除position
处的项目
update.pop("targetField", position);
删除value
的项目
update.pull("targetField", "value");
删除多个项目
update.pullAll("targetField", new Object[]"value1", "value2");
【讨论】:
【参考方案2】:$addToSet
db.collection.update(
_id: "1"
,
"$addToSet":
targetField:
$each: [
"Steve",
"Sam"
]
,
new: true
)
mongoplayground
【讨论】:
以上是关于如何使用 MongoDB 和 Spring 的存储库更新列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何配置两个实例mongodb使用spring boot和spring data
如何使用 Spring Boot 在 Mongodb 中保存重复项?
如何使用 @Query 在日期 Spring 数据 MongoDB 之间进行选择