0

这是我在 mongodb 中的 eventSchedule 集合中的示例 JSON:

/* 0 */
{
  "_id" : ObjectId("51cd841b8b757a8c4c3b0af9"),
  "type" : "evo",
  "eventInfo" : {
    "title" : "My title",
    "field1" : "MyField1",
    "schedule" : {
      "fromDate" : ISODate("2013-07-19T04:00:00Z"),
      "toDate" : ISODate("2013-07-25T20:00:00Z")
    }
  },
  "locationName" : "Loc1"
}

我想查询这个集合并在当前日期之后获取所有带有日程字段“fromDate”的 eventSchedules。

在 mongoVUE 中,以下查询有效:

db.eventSchedule.find({ "eventInfo.schedule.fromDate" : { "$gte" : ISODate("2012-04-29T00:00:00Z") } }).limit(50);

我正在尝试从我的一个 grails 控制器中执行此操作:

    def curDate= new Date()
    def sdf= new SimpleDateFormat("yyyy-mm-dd")
    def curFormattedDate= sdf.format(curDate)
    def queryVal=  "{\$gte : ISODate(\""+curFormattedDate+"T00:00:00.000Z\")}"
    query.put("eventInfo.schedule.fromDate:", queryVal.trim())
    DBObject a = db.eventSchedule.findOne(query)
    println a

上面的代码将 a 的值返回为空。请注意,如果我从中删除括号queryVal,那么它也不起作用。所以任何人都可以帮助我在 groovy 中形成适当的查询吗?

4

1 回答 1

0

在创建查询时需要纠正的地方很少:

  1. mm日期格式表示分钟而不是月份。改为使用MM
  2. 如果你真的想坚持使用mongoVUE版本,"你不需要逃跑吗?$gte
    def queryVal= "{\"\$gte\" : ISODate(\""+curFormattedDate+"T00:00:00.000Z\")}"

顺便说一句,格式化日期的一种更规范的方法是

def currentFormattedDate = new Date().format('yyyy-MM-dd')

于 2013-07-04T01:07:47.440 回答