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