中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~mongo內(nei)嵌集(ji)合(he)的(de)操(cao)作

對(dui)于mongodb的(de)內嵌對(dui)象的(de)各(ge)種操作大叔在(zai).net平臺時(shi)已經(jing)說(shuo)過(guo),同時(shi)大叔也自己封裝過(guo)mongo的(de)倉儲,使用也都很方便(bian),而在(zai)java springboot框架里(li)當(dang)然也有對(dui)應的(de)方法,下(xia)面主要(yao)說(shuo)一下(xia),希望(wang)對(dui)剛(gang)接觸mongodb的(de)同學(xue)有所幫助!

一 測試DEMO的數據結構

/**
 * 地址.
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {

  /**
   * 編號.
   */
  @Id
  private String id;
  /**
   * 省.
   */
  private String province;
  /**
   * 市.
   */
  private String city;
  /**
   * 區.
   */
  private String district;
  /**
   * 狀態.
   */
  private Status status;
  /**
   * 擴展(zhan).
   */
  private List<AddressExtension> addressExtension;
}

其中它有(you)一(yi)個內嵌的(de)集(ji)合(he)對象(xiang),addressExtension,我們添(tian)加了一(yi)些測試數(shu)據,如圖:

下面介(jie)紹幾種常用的數(shu)據操作:

 /**
   * 獲取數據.
   *
   * @param province 省
   * @param city     市(shi)
   * @return
   */
  @Override
  public Address findByProvinceAndCity(String province, String city) {
    Query query = new Query(Criteria.where("province").is(province).and("city").is(city));
    return mongoTemplate.findOne(query, Address.class, "address");
  }

  /**
   * 更新字(zi)段.
   *
   * @param address .
   */
  @Override
  public void updateCity(Address address) {
    Query query = new Query(Criteria.where("_id").is(address.getId()));
    Update update = Update.update("city", address.getCity());
    mongoTemplate.upsert(query, update, Address.class);
  }

  /**
   * 添加內(nei)嵌文檔中(zhong)的數據.
   *
   * @param id   .
   * @param info .
   */
  @Override
  public void addAddressInfo(String id, String info) {
    Query query = Query.query(Criteria.where("_id").is(id));
    AddressExtension ext = new AddressExtension();
    ext.setInfo(info);
    Update update = new Update();//update.push("Students", student);
    // addToSet如果數據已經存在(zai),則不做任何操作,而(er)push會(hui)插(cha)入一(yi)條一(yi)樣的(de)數據
    update.addToSet("addressExtension", ext);
    mongoTemplate.upsert(query, update, Address.class);
  }

  /**
   * 更新內嵌文檔里某(mou)條元素
   *
   * @param oldInfo
   * @param newInfo
   */
  @Override
  public void updateAddressInfo(String oldInfo, String newInfo) {
    Query query = new Query(Criteria.where("addressExtension.info").is(oldInfo));
    Update update = new Update();
    update.set("addressExtension.$.info", newInfo);
    mongoTemplate.upsert(query, update, Address.class);

  }

  /**
   * lambda filter.
   * @param list
   * @param predicate
   * @return
   */
  public List<AddressExtension> conditionFilter(List<AddressExtension> list, Predicate<AddressExtension> predicate){
    return list.stream().filter(predicate).collect(Collectors.toList());
  }

  /**
   * 刪(shan)除內(nei)嵌文檔中的(de)數據.
   *
   * @param id               .
   * @param addressExtension .
   */
  @Override
  public void delAddressInfo(String id, AddressExtension addressExtension) {
    Query query = Query.query(Criteria.where("_id").is(id));
    Update update = new Update();
    update.pull("addressExtension", addressExtension);
    mongoTemplate.updateFirst(query, update, Address.class);
  }

  /**
   * 刪(shan)除文(wen)檔.
   *
   * @param id .
   */
  @Override
  public void delAddress(String id) {
    Query query = Query.query(Criteria.where("_id").is(id));
    mongoTemplate.remove(query, Address.class);
  }

其中,更新內嵌集合比較(jiao)特別,它使用了集合元(yuan)素的(de)下(xia)標進行更新,$就是表(biao)示當前要更新的(de)元(yuan)素的(de)下(xia)標!

感謝閱讀!

posted @ 2018-04-24 14:00  張占嶺  閱讀(4708)  評論(1)    收藏  舉報