zoukankan      html  css  js  c++  java
  • [Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作

    插入操作:

    直接给个例子

    import static org.springframework.data.mongodb.core.query.Criteria.where;
    import static org.springframework.data.mongodb.core.query.Criteria.query;
    
    …
    
    Person p = new Person("Bob", 33);
    mongoTemplate.insert(p);//还可以多加一个参数,来提供collectionname。比如insert(p,"person").
    
    Person qp = mongoTemplate.findOne(query(where("age").is(33)), Person.class);  

    collection document的名字有下面几种方式:

    1. 默认为类名,并且首字母小写。  比如com.test.Person -> person

    2. 通过在类名上增加标记@Document 来指定。

    3. 在执行操作时,把collectionname作为参数传递进去。

    主要操作:

      insert,insertAll, save(当object不存在时,执行insert)。

    更新操作:

    import static org.springframework.data.mongodb.core.query.Criteria.where;
    import static org.springframework.data.mongodb.core.query.Query;
    import static org.springframework.data.mongodb.core.query.Update;
    
              ...
    
      WriteResult wr = mongoTemplate.updateMulti(new Query(where("accounts.accountType").is(Account.Type.SAVINGS)),
                                                                new Update().inc("accounts.$.balance", 50.00),
                                                                Account.class);

    主要操作:

      updateFirst(更新第一个匹配的), updateMulti(更新所有匹配的)

    upsert操作:

    template.upsert(query(where("ssn").is(1111).and("firstName").is("Joe").and("Fraizer").is("Update")), update("address", addr), Person.class);

    先查询,如果没有符合条件的,会执行插入,插入的值是查询值 + 更新值。

    findAndModify操作:

    mongoTemplate.insert(new Person("Tom", 21));
    mongoTemplate.insert(new Person("Dick", 22));
    mongoTemplate.insert(new Person("Harry", 23));
    
    Query query = new Query(Criteria.where("firstName").is("Harry"));
    Update update = new Update().inc("age", 1);
    Person p = mongoTemplate.findAndModify(query, update, Person.class); // return's old person object
    
    assertThat(p.getFirstName(), is("Harry"));
    assertThat(p.getAge(), is(23));
    p = mongoTemplate.findOne(query, Person.class);
    assertThat(p.getAge(), is(24));
    
    
    // Now return the newly updated document when updating
    p = template.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Person.class);
    assertThat(p.getAge(), is(25));

    可以通过设置FindAndModifyOptions来设置不同的执行效果。

    Query query2 = new Query(Criteria.where("firstName").is("Mary"));
    p = mongoTemplate.findAndModify(query2, update, new FindAndModifyOptions().returnNew(true).upsert(true), Person.class);
    assertThat(p.getFirstName(), is("Mary"));
    assertThat(p.getAge(), is(1));

    remove操作可以用来进行删除。

  • 相关阅读:
    常见算法之17---二叉树相等判断以及二叉树的复制
    常见算法之16---二维数组中查找元素
    常见算法之15---求N!末尾有多少个0
    常见算法之14---球放入盒问题
    常见算法之13---跳台阶问题
    常见算法之12---求a^n%p
    DB与java的关联
    重拾python
    Codeforces Round 212 Div 2 报告(以前没写完,现在也没心情补了,先就这样吧)
    交换Ctrl和Caps Lock键
  • 原文地址:https://www.cnblogs.com/lemonbar/p/3894330.html
Copyright © 2011-2022 走看看