我得到了看起来像这样的文件
@Document(collection="myDocument")
public class MyDocument {
@Id
private String id;
private List<Dates> dates;
}
public class Dates{
private String key;
private DateTime value;
}
并且OtherDocument是来自各种来源的 DateTime 值的容器,我不能简单地制作像DateTime birthdate;insideMyDocument这样的字段,因为我不知道key会是什么,它们只是一些描述MyDocument. 现在,我需要创建搜索引擎的价值,例如,有人要的找到所有MyDocuments与dates该载:
key“生日”大于
value“1990-01-01 0时00分00秒+00:00”
和
key“马瑟的生日”小于
value:“1975-01-01 00:00:00 +00:00”
所以,Criteria(MongoTemplate在这里使用)首先可能看起来像这样
Criteria criteria = Criteria.where("myDocument.dates.value")
.exists(true)
.gt(DateTimeUtil.valueOf("1990-01-01 00:00:00 +00:00")) //just converting String to DateTime here
.and("myDocument.dates.name")
.exists(true)
.all("Birthday"));
第二个:
Criteria criteria = Criteria.where("myDocument.dates.value")
.exists(true)
.lt(DateTimeUtil.valueOf("1975-01-01 00:00:00 +00:00"))
.and("myDocument.dates.name")
.exists(true)
.all("Mather's birthday"));
问题是,我不能将两者Criteria合二为一Query,这会导致错误。到目前为止,我发现的唯一方法是Query在这种情况下将 2 分开,然后通过使用找到公共部分 resultA.retainAll(resultB)
但重点是,我不想,这个数据库会存储很多数据,而且那些请求会非常频繁。我需要它来快速工作,并且在纯 Java 中组合 2 个列表会因为如此大量的数据而慢得要命。任何想法如何处理?
编辑#这里是当我尝试将 2Criteria像这样组合成一个时抛出的错误Query
捕获:(java.lang.RuntimeException), msg(json 不能序列化类型:class org.joda.time.DateTime) java.lang.RuntimeException:json 不能序列化类型:class org.joda.time.DateTime
墨色风雨
相关分类