Найти метод, не работающий в GMongo, использующий $ gt больше и меньше операндов - PullRequest
1 голос
/ 14 декабря 2011

Я использую библиотеку 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})

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

1 Ответ

3 голосов
/ 14 декабря 2011

Вы должны экранировать $ 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 )
...