2011-12-13 3 views
1

私はMongoDBから項目を読み込むためにGroovyでGMongoライブラリを使用しています。 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}) 

私は間違った規則を使用していますか?

答えて

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

チャンピオンのように働いて、明確にするために、ありがとう、ナット! – raffian

関連する問題