2016-07-28 8 views
1

へ変換するのですか?私はの入力を持っている場合どのように私たちがのObjectIdからタイムスタンプを取得するために<code>getTimestamp()</code>を使用できることを知っているが、タイムスタンプからのObjectIdを生成するためにどのような方法があるタイムスタンプからモンゴのObjectID

具体的には、その後、私はこれをどのように行う必要があり、DBに照会するモンゴのObjectIDに変換したいですか?

+0

[Mongodb:mongoシェルのObjectIdから日付範囲クエリを実行]の可能な複製(https://stackoverflow.com/questions/13593896/mongodb-perform-a-date-range-query-from-the -objectid-in-the-mongo-shell) –

+0

これは別の答えです。これは、タイムスタンプをobjectIDに変換する場合です。objectIDに特定の日付/時刻が含まれるようにしたいが、必ずしも現在の日時 –

答えて

0

私は、このための解決策を見つけたのだが、SOFARうまく動作します。

public function createMongoIdFromTimestamp($timestamp) { 
    $inc = 0; 
    $ts = pack('N', $timestamp); 
    $m = substr(md5(gethostname()), 0, 3); 
    $pid = pack('n', getmypid()); 
    $trail = substr(pack('N', $inc++), 1, 3); 

    $bin = sprintf('%s%s%s%s', $ts, $m, $pid, $trail); 

    $id = ''; 
    for ($i = 0; $i < 12; $i++) { 
     $id .= sprintf('%02X', ord($bin[$i])); 
    } 
    return new \MongoID($id); 
} 
0

ObjectId()は12バイトBSONタイプであるとから構成:

  • 次の3つのバイトは、マシン識別子
  • 次にあるUNIXエポック秒を表す

    • 最初の4つのバイト2バイト
    • 最後の3つのバイトは、ランダムカウンタ値明らか

    あるプロセスIDから成りタイムスタンプからのみObjectId()を作成することはできません。

  • 0

    することができますはい:

    gen_timeはdatetime型である
    dummy_id = ObjectId.from_datetime(gen_time) 
    

    0

    はモンゴシェルから作品

    > ObjectId("5a682326bf8380e6e6584ba5").getTimestamp() 
    ISODate("2018-01-24T06:09:42Z") 
    > ObjectId.fromDate(ISODate("2018-01-24T06:09:42Z")) 
    ObjectId("5a6823260000000000000000") 
    

    、これを試してみてください。

    関連する問題