[英]How to write a Spring Data MongoDB query using Date manipulation
我想使用 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);
知道我該怎么做嗎?
示例數據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"}
]
}
]
}
})
版本 3.2 兼容(使用聚合管道):
db.collection.aggregate( [ { }, ... ] )
> db.cars.aggregate([
{
$project: {
vin: 1,
keepAlive:1,
dateAdded:1,
notExpired: {
$gte:[
"$keepAlive",
{
$subtract:[
new Date(),
{ $toDate:"$dateAdded" }
]
}
]
}
}
},
{
$match: { notExpired: true }
},
{
$project: { notExpired: 0 }
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.