2017-11-15 4 views
1

タイムスタンプ値を上書きしてドキュメントを新規として挿入するmongo objectidを生成したい。だから私は以下のコードを使用してオブジェクトを取得しました。タイムスタンプからユニークなインクリメントを使用してMongo ObjectIdを構築する

var oIdWithTimestamp = function (timestamp) { 
    // Convert string date to Date object (otherwise assume timestamp is a date) 
    if (typeof (timestamp) == 'string') { 
     timestamp = new Date(timestamp); 
    } 

    // Convert date object to hex seconds since Unix epoch 
    var hexSeconds = Math.floor(timestamp/1000).toString(16); 

    // Create an ObjectId with that hex timestamp 
    var constructedObjectId = mongoose.Types.ObjectId(hexSeconds + "0000000000000000"); 

    return constructedObjectId 
}; 

しかし、同じタイムスタンプで2つのドキュメントを挿入したい場合は、その必要を満たしていません。私は、オブジェクトIDにインクリメンタ値を追加するために使用されるget_inc関数があることに気付きました。そして、同じタイムスタンプを使用して異なるobjectidを生成することができます。このインクリメンタを使ってユニークなタイムスタンプを得る方法については、16777214までお気軽にお問い合わせください。

答えて

1

以下のスニペットを使用してランダムなmongo objectidを生成しようとしました。

var bson = require('bson'); 

var generateObjIdFromTime = function(spefictime) { 
    spefictime = ~~(spefictime/1000); 
    return bson.ObjectID(spefictime); 
} 

与えられたタイムスタンプでランダムなモンゴーオブジェクトIDを生成します。

関連する問題