问题描述
我正在使用ART(一种报告工具)工具,其中我们试图使用groovy显示给定日期范围内的数据。
我正在使用mongodb,mongo查询(以ISO日期格式)会在日期范围之间进行搜索。我不确定如何在groovy中为mongodb的搜索查询中添加ISO日期。 请建议我如何解决此问题,或者在不使用ISO日期格式的情况下是否有其他日期范围替代方法
这是我尝试的代码。我得到空结果
import org.bson.Document;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.DBCursor
import com.mongodb.BasicDBObject
def dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
def dateString = "2020-08-18T18:30:00Z"
def date = Date.parse(dateFormat,dateString)
def Now1 = date.format("yyyy-MM-dd'T'HH:mm:ss'Z'")
def isodate = 'ISODate(\"' + Now1 + '\")'
searchObj = [date: ['$gte': isodate]]
MongoDatabase db = mongoClient.getDatabase("dbname");
MongoCollection < Document > collection = db.getCollection("DBCollection");
BasicDBObject query = new BasicDBObject(searchObj)
MongoCursor < Document > cursor = collection.find(query).iterator();
List < Document > records = new ArrayList < > ();
try {
while (cursor.hasNext()) {
records.add(cursor.next());
}
} finally {
cursor.close();
}
return records;
我可以在mongo shell中使用此查询来获取结果,但是从groovy不能正常工作
>db.dbCollection.find({date:{$gte:ISODate("2020-08-18T18:30:00Z")}})
{
"_id" : XXXXXXXXXXXXXXXX,"date" : ISODate("2020-08-23T18:30:00Z"),"name" : "nathan","age" : 27
}
{
"_id" : XXXXXXXXXXXXXXXX,"name" : "steve","age" : 23
}
解决方法
从未使用过mongodb,但在我看来,mongodb java api使用mongodb Filters class中的静态方法来表示类似%gte
的比较运算符。所以你会做类似的事情:
static import com.mongodb.client.model.Filters.*
...
def cursor = collection.find(gte('date',isodate)).iterator()
...