簡體   English   中英

如何在Spring Data Mongodb上使用SpEL表達式?

[英]How to use SpEL expression on Spring Data Mongodb?

我無法弄清楚如何在我的現有查詢和文檔中為新引入的字段使用SpEL表達式。

范例:

@Document(collection = "abc")
public class Abc {

 private boolean deleted;
 public boolean isDeleted() {
  return deleted;
 }

 public void setDeleted(boolean deleted) {
  this.deleted = deleted;
 }

}

我已經在使用Spring Data Mongodb

@Repository
public interface AbcRepository extends MongoRepository < Abc, String > {

 Abc findAllByDeleted(boolean deleted);

}

注意:我在abc集合上有近1000多個文檔。

我想在集合中引入新字段(例如狀態),查詢將更改,並且不會返回任何信息,因為新字段包含舊數據,如何處理這種情況? 我不想做數據修補。 所以我發現我們可以使用spring數據SpEL表達式中存在的內容。

https://docs.spring.io/spring-data/mongodb/docs/2.1.0.M3/reference/html/#mongodb.repositories.queries.json-spel

這是我的更改:

@Document(collection = "abc")
public class Abc {
...
...

private boolean status;
 public boolean isStatus() {
  return status;
 }

 public void setStatus(boolean status) {
  this.status = status;
 }
}

和我的查詢更改為

//Tried this but throwing exception
@Query("{'status' : {$exists :false}}")
Abc findAllByDeletedAndStatus(boolean deleted, boolean status);

如何使用SpEL表達式檢查狀態字段是否存在並應用從調用方傳遞的參數?

我不確定您是否完全理解您的要求,但是請給我們一些幫助。

假設Abcdeleted並且status屬性為:

@Query("{ $and :[" +
          "?#{ { 'deleted' : [0] } }," +
          "?#{ { 'status' : [0] } }" +
         "]}")
  Abc findAllByDeletedAndStatus(boolean deleted, boolean status);

如果參數是可選的,則可以使用這種方式(在可選過濾器的情況下非常有用):

  @Query("{ $and :[" +
          "?#{ [0] == null ? { $where : 'true'} : { 'deleted' : [0] } }," +
          "?#{ [1] == null ? { $where : 'true'} : { 'status' : [1] } }" +
       "]}")
  Abc findAllByDeletedAndStatus(boolean deleted, boolean status);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM