我正在使用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})

我使用的约定错误吗?

最佳答案

您必须转义$ 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 )

关于grails - 使用大于和小于操作数的$ gt查找在GMongo中不起作用的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8497602/

10-11 02:41