我无法弄清楚如何在现有查询和文档中为新引入的字段使用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);
}
注意:我有大约1000多个关于abc集合的文档。
我想在收藏夹中引入新字段(例如状态),查询将更改,并且不会返回任何信息,因为新字段不存在且旧数据不存在,我该怎么办?处理这种情况?我不想做数据修补。所以我发现我们可以使用spring数据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表达式来检查状态字段是否存在并应用从调用方传递的参数?
答案 0 :(得分:0)
我不确定您是否完全了解您的要求,但是请多多帮助。
假设Abc
具有deleted
和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);