0

現在、URLでMongodb ObjectIdsを使用していますが、代わりにこのモジュールを使用したいと思います: https ://github.com/dylang/shortid

しかし、既存のデータにはまだこれらのスラッグがありません。それらすべてを移行するにはどうすればよいですか?どこを見ても、noSQLでデータを移行する必要はないと言われています。

これがスキーマの例です。「shortid」フィールドを追加しています。

var ItemSchema = new Schema({
    name    : { type: String, required: true, trim: true }
    , description: { type: String, trim: true }
    , comments  : [CommentSchema]
    , shortid : { type: String, required: true }
});

私の意図は、/ items/508cbd80c0e1a44277000003の代わりに/items/PPBqWA9のようなURLを使用することです

まだ存在しない場合はshortidを生成する.pre('save')メソッドがあります。

または、ShortId.generate()を呼び出す関数をデフォルトにすることができますか?

2つの要件:1)変更しないでください。2)既存のオブジェクトに遡及的に適用します。

4

1 に答える 1

0

私はあなたの選択は次のいずれかだと思います:インデックスが潜在的に長期間遷移している可能性があるという事実にコードを対処させるか、すべてを一度に更新してから単一のコード変更を行います。

後者はそれほど面倒ではないように見えますが、すべてのアイテムドキュメントをバッチ処理できる必要があります。その場合、次のことができます。

  1. 提案したように、デフォルトでスキーマに一意のインデックスを追加します。は非同期関数呼び出しではないため、使用するschema.pre必要はないようです。ShortId.generate何かのようなものshortid: { type: String, default: ShortId.generate(), required: true, index: {unique: true}}

  2. shortid既存のすべてのアイテムをロードするスクリプトを作成し、それらを新しいプロパティで保存します。

  3. shortidの代わりに使用を開始するようにコードの残りの部分を調整しますid

于 2012-10-29T07:39:03.563 に答える