Question

I'm using the GMongo library in Groovy to read items from MongoDB. The CacheItem class is a simple object to hold cache items, and each item has an expiration time which is set at the time when it's added to the mongo. When I read items from mongo, I only want to retrieve items that have not expired based on the expirationMillis field.

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

This works for retrieving items using the cacheKey

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

But when I try to use criteria with greater than/less than convention against the expirationMillis, I can't seem to retrieve any documents..

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

Am I using the wrong convention?

Was it helpful?

Solution

You have to escape $gt such that it looks like this:

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

or

long nowMillis = (new Date()).getTime()
item = mongoDb.cache.findOne( [ cacheKey: "600", expirationMillis: [ '$gt' : nowMillis]]  as BasicDBObject )
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top