Pentaho MongoDB 报告查询日期范围
Posted
技术标签:
【中文标题】Pentaho MongoDB 报告查询日期范围【英文标题】:Pentaho MongoDB Report query date ranges 【发布时间】:2013-12-05 10:20:12 【问题描述】:我正在尝试使用 Pentaho Report Designer MongoDB 本机连接器生成报告,但无法使用日期范围。
我的收藏有一个名为“时间戳”的列,我尝试在查询选项卡中输入以下内容:
"timestamp" : $gte :ISODate("2013-12-04T15:10:00.000Z")
"timestamp" : $gte : new Date("2013-12-04T15:10:00.000Z")
虽然这些查询都使用 .find(query) 在 mongo shell 上工作,但在 Pentaho 报表设计器中,我没有收到任何行,也没有错误消息。
更简单的查询,例如:
"objType" : "Image"
在珠三角工作得很好。
编辑:
感谢以下人员的建议,我设法让它工作:
http://wiki.pentaho.com/display/EAI/MongoDB+Input
所以答案是使用类似的东西:
"$query" : "timestamp" : $gte : $date : "2013-12-04T15:10:00Z" , $lte : $date : "2013-12-04T15:12:00Z"
我仍然无法使用日期参数使其工作:如果我输入:
"$query" : "timestamp" : $gte : $date : "$StartDate" , $lte : $date : "$EndDate"
在查询选项卡中,我选择“开始日期”和“结束日期”为“日期”类型,它不起作用。如果我将参数的类型设置为“String”并将其值设置为 ISO 格式,则它可以正常工作。
有没有办法直接使用 Date 类型的参数?
【问题讨论】:
我试图猜测发生了什么,因为我不知道连接器,但我非常了解 mongo。 ISODate 是一种原生的 Mongo 类型,这意味着来自任何驱动程序的任何查询都必须将特定语言的日期转换为 ISODate。在这种情况下,您的转换似乎效果不佳。在 Python 中发送日期时间值很容易,在 NodeJS 中也非常简单。如果您发送日期,则必须以您的语言提供真实日期,除非有一个我不知道的将字符串转换为 ISODate 的驱动器 Pentaho Report Designer 基于 Java 并使用 Mongo Java 驱动程序。 您数据库中的“时间戳”是真正的 ISODateTime,对吧? 我正在阅读文档,发现有些奇怪。 Mongo 中没有像“$query”这样的东西,所以那里有一个可能会弄乱日期时间的转换。您是否尝试过在一个查询中分别使用“gte”和在第二个查询中使用“lte”,看看这是否有效? 是的,我试过了,我认为 Pentaho Report Designer 在执行参数替换时如何将 Date 对象传递给底层 Java 驱动程序存在一些错误。理论上 Pentaho 应该根据参数类型执行正确的参数替换(例如在 SQL 数据源中这工作正常)。 【参考方案1】:来自https://help.pentaho.com/Documentation/8.2/Products/Data_Integration/Transformation_Step_Reference/MongoDB_Input
你可以使用类似下一个:
created_at : $gte : $date : "2014-12-31T00:00:00.000Z"
带变量:
# my_date = '2014-12-31'
created_at : $gte : $date : "$my_dateT00:00:00.000Z"
或者:
# my_date_time = '2014-12-31T00:00:00.000Z'
created_at : $gte : $date : "$my_date_time"
【讨论】:
以上是关于Pentaho MongoDB 报告查询日期范围的主要内容,如果未能解决你的问题,请参考以下文章
Pentaho 报告:日期选择器参数未解析为用户控制台网页报告
Mongodb:从 mongo shell 中的 ObjectId 执行日期范围查询