2011-12-15 10 views
0

私は数十万の文書を含むコレクションを持っています。これらの文書の1つを効率的にチェックする必要があります。MongoDB検索 - 文書内で最新のものを探す

{ 
    "_id" : ObjectId("4ee9b4239641dce218030000"), 
    "last_seen" : Date(1323938851402), 
    "is" : { 
     "4ee910de9641dc4906000000" : Date(1323938851302), 
     "4ee211df9621dc4206000000" : Date(1323938851402), 
     "4ef913de9631db4922000000" : Date(1323938851102), 
    } 
} 

私はドキュメントの_idが4ee9b4239641dce218030000知っている、と私は内の項目がID 4ee211df9621dc4206000000のオブジェクトが最新である「ある」かどうかを決定する必要があります。ここでは

は、これらのドキュメントの1つの例です3つのうちの1つであり、最後の5分のタイムスタンプ値を有する。

"last_seen"に保存されているタイムスタンプが "is"オブジェクトの最新レコードと常に同じ値になるようにすると役立ちます。おそらく彼らは比較することができますか?

MongoDBでこれを効率的に行う方法について考えてみませんか?

答えて

1

なぜこれをクエリで解決したいですか?あなたはすでにIDで検索しています。 "is"から最新の要素を取得するコードを書くだけです。スキーマを変更したり、最近のアクティビティのタイムウィンドウについて何らかの前提条件を設定したりすることで、過度に複雑なことをしないでください。

0

他のコレクションでは「最高」を保つのが最善です。もしそうなら、それはあなたが好きなので、それを並べ替えることができるので、それが最新のIDかどうかを見つけます。日付でソートされた配列、「ある」、そしてその後、クエリはこのようなものになるだろうことについて

1

方法:

`{$and : [ {_id : "4ee9b..." }, 
      {is[0].date: {$gt : now-5min }}, 
      {is[0]._id : "4ee21.." }]}` 

は商品でない限りは結果を取得しない「4ee9bは..」最新かつ少ないです5分以上経過しています。

関連する問題