以下是我在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的值为null。请注意,如果我从queryVal
删除括号,那么它也不起作用。所以任何人都可以帮我在groovy中形成适当的查询吗?
答案 0 :(得分:0)
您需要纠正创建查询的几个方面:
mm
表示分钟而非月份。请改用MM
。"
逃脱$gte
?def queryVal= "{\"\$gte\" : ISODate(\""+curFormattedDate+"T00:00:00.000Z\")}"
顺便说一句,格式化日期的更加通俗的方式是
def currentFormattedDate = new Date().format('yyyy-MM-dd')