2012-01-07 13 views
0

MongoDBでは、私は「クライアント」と呼ばれるドキュメントの集まりを持っています。各ドキュメントは、おおよそ次のように構成されています。私は、「過去24時間のタイムスタンプを持つ少なくとも一つのセッションを持っているすべてのクライアント」を照会できるようにしたいと思い配列内のフィールドでドキュメントを照会する

{ 
    "Sessions": [ 
    { 
     "SessionId": "pojiu5iprr2xw5ucsudyrkpv", 
     "LocationId": { 
     "$oid": "4de4590bfcee1a1b44165e2b" 
     }, 
     "Timestamp": "Wed, 01 Jun 2011 09:39:26 GMT -04:00" 
    } 
    ], 
    "_id": { 
    "$oid": "4de6410efcee1a1204a3326c" 
    } 
} 

:タイムスタンプが日時であることに注意してください。完全なM/Rスキャンに頼ることなく可能ですか?また、静的に定義されたDate(例: 「最新のセッション時間」のメイン文書にフィールドを追加する方法についてどのように

答えて

1

「以降の2012年1月5日よりタイムスタンプを持つ少なくとも一つのセッションを持っているすべてのクライアント」。

更新: OK]をクリックして、ここに新しいフィールド/インデックスを追加することなく、それを行うことができます方法は次のとおりです。シングルライン上の

db.clients.find(
    { "Sessions" : 
     { $elemMatch : 
     { Timestamp : { $gt : new Date(new Date() - 86400000) } } 
     } 
    } 
); 

同じコード:

db.clients.find({ "Sessions" : { $elemMatch : { Timestamp : { $gt : new Date(new Date() - 86400000) } } } }); 

86400000は、数あります1ミリ秒の

+0

これは私のバックアップ計画です。データを複製する必要はありません。 –

+0

索引付けの方法と考えてください。すべてのインデックスは、実際には - データの重複です。 –

+0

確かに。もし私ができるならば、私はただインデックス作成ビジネスから離れたいと思っています。 –

関連する問題