我有一个 mongodb 集合。这些文档有两个字段,称为 rtd(天数,int 值)和时间戳(long 值)。我需要使用 Criteria 查询让所有文档满足此条件
如果文档是 x
currentTimestamp - x.timestamp 转换为天 < x.rtd
try {
return mongoTemplate.find(query(criteria), PredictiveEntity.class).stream().filter(predictiveEntity ->
predictiveEntity.getRtd() >= TimeUnit.DAYS.convert(Instant.now().toEpochMilli() - predictiveEntity.getTimestamp(), TimeUnit.MILLISECONDS)
).collect(Collectors.toList());
} catch (Exception e) {
return null;
}
最佳答案
以下查询可以获得预期的输出:
db.predictiveentry.find({
$expr:{
$lt:[
{
$toInt:{
$divide:[
{
$subtract:[new Date().getTime(), "$timestamp"]
},
86400000
]
}
},
"$rtd"
]
}
})
由于 Criteria 仍然不支持 $expr,因此我们需要遵循不同的路线,即直接解析 BSON 查询。
Query query = new BasicQuery("{ $expr:{ $lt:[ { $toInt:{ $divide:[ { $subtract:[new Date().getTime(), '$timestamp'] }, 86400000 ] } }, '$rtd' ] } }");
return mongoTemplate.find(query, PredictiveEntity.class).stream().collect(Collectors.toList());
关于java - 将计算属性与条件查询结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57368485/