【问题标题】:How do I update a list using MongoDB and Spring's repository?如何使用 MongoDB 和 Spring 的存储库更新列表?
【发布时间】: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 中添加新数据而不在本地找到它?因为如果我的列表太大,我不想加载它,而只是插入里面有新的东西。”

谢谢。

【问题讨论】:

    标签: java spring mongodb spring-mvc spring-data-mongodb


    【解决方案1】:

    spring data mongodb 使用 MongoTemplateQueryUpdate

    • 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

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 2021-04-17
        • 2013-07-20
        • 2018-08-25
        • 2022-06-25
        • 2021-06-27
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多