简体   繁体   English

如何使用 MongoDB 和 Spring 的存储库更新列表?

[英]How do I update a list using MongoDB and Spring's repository?

I have a document like below:我有一个像下面这样的文件:

{
  myDocument: 
  {
     _id: (Auto-generated)
     someField: "Hello world",
     targetField: ["Steve", "Bill"]
  }
    
}

Also, I have a repository like this:另外,我有一个这样的存储库:

@Repository
public interface FooRepository extends MongoRepository<MyDocument, String> {

}

My question is : "How do I add a new data inside of targetField without finding it locally? Because if my list gets too big, I don't want to load it, but only insert something new inside of it."我的问题是:“如何在 targetField 中添加新数据而不在本地找到它?因为如果我的列表太大,我不想加载它,而只想在其中插入一些新数据。”

Thanks.谢谢。

$addToSet

db.collection.update({
  _id: "1"
},
{
  "$addToSet": {
    targetField: {
      $each: [
        "Steve",
        "Sam"
      ]
    }
  }
},
{
  new: true
})

mongoplayground mongoplayground

Using MongoTemplate , Query and Update by spring data mongodb使用MongoTemplate ,通过spring data mongodb QueryUpdate

  • Update.addToSet Add items to a Set (non-duplicatable) Update.addToSet将项目添加到集合(不可复制)
  • Update.push Append items to an Array (duplicatable) 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");
  • To get result document, using FindAndModifyOptions要获取结果文档,请使用FindAndModifyOptions
FindAndModifyOptions options = FindAndModifyOptions.options()
        .returnNew(true);
TargetClass result = mongoTemplate.findAndModify(query, update, options, TargetClass.class, "collectionName");
  • Add multiple value添加多个值
update.addToSet("targetField")
    .each("value1", "value2");
update.push("targetField")
    .each("value1", "value2");
  • Remove item at position删除position项目
update.pop("targetField", position);
  • Remove item by valuevalue删除项目
update.pull("targetField", "value");
  • Remove multiple items删除多个项目
update.pullAll("targetField", new Object[]{"value1", "value2"});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在Spring Data MongoDB存储库中查询日期? - How do I query for dates in Spring Data MongoDB repository? Spring Data和MongoDB存储库 - 如何创建更新查询? - Spring Data and MongoDB repository - how to create an update query? 如何使用存储库和ViewModel更新会议室数据库中的字段 - How do I update a field in a room database using a repository & viewmodel Spring MVC - 如何使用控制器方法更新模型对象的属性? - Spring MVC - How do I update a model object's attributes using a controller method? 如何使用Spring Data MongoDB将文档嵌入到Map中? - How do I embed documents in a Map using Spring Data MongoDB? 如何使用 Spring 数据 MongoDB 存储库查询大于嵌入的文档? - How to query with greaterThan for an embedded document using Spring Data MongoDB Repository? 使用Spring Data MongoDB中的List参数进行存储库查询 - Repository query with a List parameter in Spring Data MongoDB 如何使用存储库模式更新mongodb中的嵌入式文档 - How to update embedded documents in mongodb using repository pattern 聚合 Spring 数据 Couchbase 存储库方法 - 如何查询给定属性的所有唯一值的列表? - Aggregate Spring Data Couchbase repository methods - how do I query for a list of all unique values for a given property? 如何从文档侦听器更新JComboBox的列表? - How do I update a JComboBox's list from a Document Listener?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM