1

Mongoose/MongoDB を介して自分の を管理したい_idのですが、デフォルトのものはかなり長く、帯域幅を消費します。

難しいのは、それらを作成する必要があることです (たとえば、カウンターをインクリメントすることによって) が、これを並行環境 (Node.JS) で行う必要があります。新しいドキュメントが作成されるたびに_id、次の unique を自動的に生成するカスタムおよび静的メソッド (またはそれ以上のもの) を使用して、スキーマを作成する簡単な例はありますか?_id

4

3 に答える 3

2

Chad が簡単に触れたように、Mongo は uuid システムを実装し、タイムスタンプ、ネットワーク アドレス、マシン名、および自動インクリメント 2 桁カウンター (同じタイムスタンプを持つ複数のエントリが発生した場合) を考慮します。このスキーマは、分散データベースを許可する (つまり、異なるマシンで異なるデータベース インスタンスを実行する) ために使用されますが、各エントリには一意の識別子が含まれていることを保証します (マシン名セクションが異なるため)。

独自のスキーマを展開しようとすると、mongo が提供するスケーラビリティが大幅に制限される可能性があります。

于 2013-03-28T17:18:34.447 に答える
2

Mongo の findAndModify() を使用して、連続した値を生成できます。以下にその例を示します。

// (assuming db is a reference to a MongoDB database)
var counters = db.collection('counters');
var query = {'name': 'counterName'};
var order = [['_id','asc']];
var inc = {$inc:{'next':1}};
var options = {new: true, upsert: true};
counters.findAndModify(query, order, inc, options, function(err, doc) {

  if(err) {
    callback(err);
    return;
  }      

  var id = doc.next;
  callback(null, id);
});

シーケンシャル ID の生成はアプリケーションでは見栄えがしますが、いくつかの欠点があることに注意してください (たとえば、データベースを地理的に分割する必要がある場合)。これが、Mongo が長い疑似乱数キーを使用する理由です。

于 2013-03-28T17:18:55.407 に答える