使用$ gt大于且小于操作数的查找不在GMongo中工作的方法

时间:2011-12-13 23:16:22

标签: grails mongodb groovy gorm-mongodb

我正在使用Groovy中的GMongo库来读取MongoDB中的项目。 CacheItem类是一个容纳缓存项的简单对象,每个项都有一个到期时间,该时间是在添加到mongo时设置的。当我从mongo读取项目时,我只想根据expirationMillis字段检索尚未过期的项目。

class CacheItem {
  def _id
  def cacheKey
  long expirationMillis
  def value
}

这适用于使用cacheKey检索项目

item = mongoDb.cache.findOne( cacheKey: "600")

但是当我尝试对expirationMillis使用大于/小于约定的条件时,我似乎无法检索任何文档..

long nowMillis = (new Date()).getTime()
item = mongoDb.cache.findOne( cacheKey: "600", expirationMillis: { $gt: nowMillis})

我使用了错误的惯例吗?

1 个答案:

答案 0 :(得分:3)

你必须逃避$ gt,看起来像这样:

long nowMillis = (new Date()).getTime()
item = mongoDb.cache.findOne( [ cacheKey: "600", expirationMillis: [ "\\\$gt" : nowMillis]]  as BasicDBObject)

long nowMillis = (new Date()).getTime()
item = mongoDb.cache.findOne( [ cacheKey: "600", expirationMillis: [ '$gt' : nowMillis]]  as BasicDBObject )