java - 将计算属性与条件查询结合使用

标签 java database mongodb criteria

我有一个 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/

相关文章:

php - 需要数据库结构建议

mongodb - 计算数组中评分的平均值,然后将字段添加到 MongoDB 中的原始文档

java - 使用其他 JSON 对象过滤 JSON 中的键和值

java - 流式传输 json 元素

php - 将帖子上传到 Wordpress 数据库时出错?

java - 如何防止 JTable 单元格开始编辑某些击键?

mysql - 关系数据库设计 - 大学提供的类(class)

mongodb - 我如何在 mgo Mongodb 中选择所有相同类型的嵌入式文档?

带有地址的Java android打开谷歌地图

java - 什么时候认为 Java 8 Stream 被消费了?