28

次のようなコレクションがあります。

{
  _id: ObjectId("50a68673476427844b000001"),
  other fields
}

範囲クエリを実行して、2 つの日付の間のレコードを検索したいと考えています。私は、これを行うmongo shell varのObjectIdから日付を取得できることを知っています:

var aDate = ObjectId().getTimestamp()

しかし、(現時点で把握できる限り)タイムスタンプ部分だけで構成される ObjectId を作成する方法はありません-私の理想的な解決策は、機能していないmongoシェルコードです。

var minDate = ObjectId(new Date("2012-11-10"));
var maxDate = ObjectId(new Date("2012-11-17"));

minDate と MaxDate を範囲値として検索を使用します。

シェルでこれを行う方法はありますか? いくつかのドライバー製品には興味がありません。

4

2 に答える 2

33

2 つのステップでそれを行うことができます。

 var objIdMin = ObjectId(Math.floor((new Date('1990/10/10'))/1000).toString(16) + "000
0000000000000")
 var objIdMax = ObjectId(Math.floor((new Date('2011/10/22'))/1000).toString(16) + "000
    0000000000000")
 db.myCollection.find({_id:{$gt: objIdMin, $lt: objIdMax}})

または1つのステップで(読みにくい):

db.myCollection.find({_id:{$gt: ObjectId(Math.floor((new Date('1990/10/10'))/1000).toString(16) + "000
    0000000000000"), $lt: ObjectId(Math.floor((new Date('2011/10/10'))/1000).toString(16) + "000
    0000000000000")}})
于 2012-11-27T22:33:49.637 に答える