Groovy:从groovy中基于mongodb中的日期范围搜索数据

问题描述

我正在使用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()
...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...