首页 > 解决方案 > 用于 MongoDB 查询的 Jasper 报告 ISODate 参数

问题描述

我有一个 Jasper 报告,其中包含从日期和到日期的几个日期参数。

<parameter name="fromDate" class="java.util.Date" />
<parameter name="toDate" class="java.util.Date" />

我想在日期比较中使用这些与作为 ISODate 存储在我的 MongoDB 数据库中的 createdDate 字段

$match : {
  "createdDate": {
    $gte: "$P!{fromDate}",
        $lt: "$P!{toDate}"
  }
}

这在不返回任何结果方面不起作用,因此我创建了一个变量来将日期参数转换为 ISODate 格式:

<variable name="formattedFromDate" class="java.lang.String">
  <initialValueExpression><![CDATA[DATEFORMAT($P{fromDate}, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")]]></initialValueExpression>
</variable>

然后我将管道的 $match 阶段更改为:

$match : {
  "createdDate": {
    $gte: ISODate("$V!{formattedFromDate}")
  }
}

同样,它没有返回任何应该返回的结果,但是当我将它硬编码为我为报告设置的值作为参数时,它确实返回了:

$match : {
  "createdDate": {
    $gte: ISODate("2020-01-01T00:00:00.000Z")
  }
}

任何想法我做错了什么?不幸的是,我不能将 from 和 to 日期保留为硬编码值,因为用户需要能够选择这些值。

标签: mongodbjasper-reports

解决方案


推荐阅读