2011-12-13 1 views
1

Я использую библиотеку GMongo в Groovy для чтения предметов из MongoDB. Класс CacheItem - это простой объект для хранения элементов кэша, и каждый элемент имеет время истечения, которое устанавливается в момент, когда он добавляется к монго. Когда я читаю элементы из монго, я хочу только получить элементы, которые не истекли, в зависимости от поля 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}) 

Я использую неправильное соглашение?

ответ

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) 
+0

Я попробовал, но Eclipse, жалуется на синтаксисе; не нравится точка с запятой, разделяющая «\\\ $ gt» и «nowMillis» – raffian

+0

извините ... опечатка. Вы должны использовать квадратные скобки вместо курчавых – Nat

+0

Работал как чемпион, спасибо за разъяснение, Nat! – raffian