簡體   English   中英

如何使用日期操作編寫 Spring Data MongoDB 查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM