【问题标题】:Forming queries with comparison query operators and ISODate from groovy to get data from mongodb使用比较查询运算符和来自 groovy 的 ISODate 形成查询以从 mongodb 获取数据
【发布时间】:2013-07-03 14:09:13
【问题描述】:

这是我在 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 中形成适当的查询吗?

【问题讨论】:

  • 您没有使用可用于 Grails 的 MongoDB GORM 插件?
  • @dmahapatro 是的!我使用的是 1.3.0 版本的 GMongo。
  • 不只是做db.eventSchedule.findOne( [ 'eventInfo.schedule.fromDate': [ '$gte': new Date() ] ] )工作吗?
  • @tim_yates 不,它没有。

标签: mongodb grails groovy grails-orm


【解决方案1】:

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

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

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

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

【讨论】:

  • 以下 DBCursor cursor = db.ewhet.find(['$gte':'ISODate(2013-07-14T08:44:17.761Z)']) 不起作用。可以做什么?我什至尝试了 new Date(),'new Date()' 而不是 ISODate.Pls 你能建议一些出路吗?
  • 我尝试将此查询用于日期范围 db.myCollection.find(date : ['$gte':'ISODate(2013-07-14T08:44:17.761Z)'])。它给出了空的结果。它适用于 ISO 日期从 groovy 到 mongodb 的任何人吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2019-03-10
相关资源
最近更新 更多