1

モデルの1つにある一意の_idフィールドを比較的短くしたいのですが、通常のMongo _idの方がはるかに長いのではなく、8文字/数字です。このような短いunique-indexがあると、コードの他の場所で役立ちます。理由はここではスキップします。トリックを実行するスキーマを正常に作成しました(randomStringは、指定された長さの文字列を生成する関数です)。

new Schema('Activities',  {
    '_id': { type: String, unique: true, 'default': function(){ return randomString(8); } },   
    // ... other definitions
}

これは今のところうまく機能しますが、randomString関数から生成されたIDの重複が心配です。可能なIDは36^8あるので、今のところ問題はありません...しかし、可能なIDのセットがいっぱいになると、IDが重複しているために挿入コマンドが失敗するのではないかと心配しています。

明らかに、挿入を行う前にIDが取得されたかどうかを確認するために追加のクエリを実行できます...しかし、それは私を内部で泣かせます。

これを行うためのより良い方法があると確信していますが、ドキュメントには表示されていません。

4

2 に答える 2

5

このshortidlibhttps ://github.com/dylang/shortidは、DoodleまたはDieによって使用されており、バトルテスト済みのようです。

于 2012-07-17T17:15:44.650 に答える
2

に一意のインデックスを作成する_idと、重複するキーを使用してドキュメントを挿入しようとするとエラーが発生します。したがって、エラーを検索し、別のIDを生成してその場合は挿入を再試行する、実行する挿入の周りにエラー処理をラップします。この拡張保存を実装するメソッドをスキーマに追加して、物事をクリーンでドライに保つことができます。

于 2012-07-17T14:44:26.587 に答える