mongo コレクションが与えられた場合 (説明のためにいくつかのフィールドのみに取り除かれています):
{
"_id" : ObjectId("52402905e4b0cebf1e474093"),
"impressionId" : LUUID("6a46028f-aa02-e87d-c097-01df765ec487"),
"requestTime" : ISODate("2013-09-23T11:41:57.505Z"),
"responseTime" : ISODate("2013-09-23T11:41:57.712Z"),
}
requestTime を照会したい。理想的には、2 つのクエリが必要です。1 つは正確な requestTime 用で、もう 1 つは requestTime の範囲 (ある日時以上で他の日時以下) 用です。私はこれまでに次のことを試しましたが、どれもうまくいかないようです:
def fromDate = new Date(2013, 9, 22, 11, 41, 57)
def fromDateLong = fromDate.getTime()
def toDate = new Date(2013, 9, 23, 11, 41, 58);
def toDateLong = toDate.getTime()
// None of these return a record
def result = db.activityLog.find(requestTime : ['$date' : '2013-09-23T11:41:57.505Z']).count()
def result = db.activityLog.find(requestTime : ['$gte' : fromDateLong, '$lte' : toDateLong]).count()
def result = db.activityLog.find(requestTime : ["\\\$gte" : fromDateLong, "\\\$lte" : toDateLong]).count()
def result = db.activityLog.find(requestTime : ['$gte' : fromDate, '$lte' : toDate]).count()
def result = db.activityLog.find(requestTime : ["\\\$gte" : fromDate, "\\\$lte" : toDate]).count()
// I have also tried to read the first record form the mongo collection pull out the date (which works fine) and then query for this date (which doesn't work):
def result = db.activityLog.findOne()
println result.requestTime // prints correct requestTime
def requestTimeLong = result.requestTime.getTime()
println requestTimeLong // prints correct requestTime
def result2 = db.activityLog.find(requestTime : ["\\\$gte" : requestTimeLong]).count()
def result3 = db.activityLog.find(requestTime : ["\\\$date" : requestTimeLong]).count()
def result4 = db.activityLog.find(requestTime : ["\\\$gte" : result.requestTime]).count()
def result5 = db.activityLog.find(requestTime : ["\\\$date" : result.requestTime]).count()
println result2 // prints 0 for both above queries i.e. no records found
println result3 // prints 0 for both above queries i.e. no records found
println result4 // prints 0 for both above queries i.e. no records found
println result5 // prints 0 for both above queries i.e. no records found
誰か提案はありますか?これについての助けは大歓迎です。
ある程度の進歩はありましたが、まだ完全には機能していません。レコードを取得して日付を引き出し、この日付をクエリで使用して機能させることができます。ただし、自分で日付を作成しようとすると機能しません。
def result = db.activityLog.findOne(impressionId : ['$exists' : true])
def requestTimeResult = result.requestTime
println requestTimeResult
println requestTimeResult.class
def requestTimeLong = result.requestTime.getTime()
println requestTimeLong
def result2 = db.activityLog.find(requestTime: ['$gte': ['$date' : requestTimeLong]]).count()
def result3 = db.activityLog.find(requestTime: ['$gte': requestTimeResult]).count()
println result2
println result3
def fromDateNew = new Date(2013, 8, 23, 12, 41, 50)
println fromDateNew.class
println fromDateNew
def result4 = db.activityLog.find(requestTime: ['$gte': fromDateNew]).count()
println result4
出力:
Mon Sep 23 12:41:50 BST 2013
class java.util.Date
1379936510544
0
196869
class java.util.Date
Sat Aug 23 12:41:50 BST 3913
0