如何使用日期操作编写Spring Data MongoDB查询

问题描述 投票:0回答:1

我想使用spring数据存储库@Query注释编写mongodb查询,这是我的要求:

获取最近60分钟内添加的所有Vins,它们仍然处于活动状态

“ keepAlive”是特定VIN处于活动状态的时间,以毫秒为单位。当在数据库中输入记录时,“ keepAlive”可以设置为30分钟,60分钟等

示例数据:

{ vin: "ANBCDERGGGHHGUTY", keepAlive: "3600000", dateAdded: "2019-12-16T16:45:29-05:00" }
{ vin: "T5765ERGGGHHGUTX", keepAlive: "1800000", dateAdded: "2019-11-14T13:41:29-03:00" }

这是我的课程:

public class MyEntity {
    private String vin;
    private long keepAlive;
    private Date dateAdded;
}

我已经尝试过类似的操作,但似乎不起作用:

@Query(value = "{'keepAlive':{$lte : {$subtract: [?0, 'dateAdded']}}}")
List<MyEntity> findLatestVins(Date currentSystemDate);

任何想法我该怎么做?

java spring mongodb spring-data-mongodb
1个回答
0
投票
样本数据db.cars.find()

{ "vin" : 1, "keepAlive" : 3600000, "dateAdded" : "2019-12-17T15:00:29+01:00" } { "vin" : 2, "keepAlive" : 3600000, "dateAdded" : "2019-12-17T13:00:29+01:00" } { "vin" : 3, "keepAlive" : 1800000, "dateAdded" : "2019-12-17T15:00:29+01:00" }

请注意,字段keepAlive的类型为number

mongodb控制台上:

db.cars.find({ $expr: { $gte: [ "$keepAlive", { $subtract: [ new Date(), {$toDate: "$dateAdded"} ] } ] } })

© www.soinside.com 2019 - 2024. All rights reserved.