4

何も指定されていない場合、Mongoose は _id フィールドに ObjectID を自動的に入力し、モデルのインスタンスを構築するときに _id を上書きできることを知っています。

私が欲しいのは、透過的な方法で他のフィールドから _id を作成することです。モデルのインスタンスを作成するときに _id フィールドを省略し、それを埋める関数を呼び出す必要があります。この関数はスキーマ レベルで宣言する必要があり、モデルを使用する人は誰でも、_id が Mongoose ではなく関数によって埋められたことを知りません。

私が見逃したスキーマ コンストラクターのフックまたはパラメーターはありますか?

マングース 3.0.x

これをもっと具体的にしましょう。想像してみてくださいBlogPost。タイトルを長押しして、素敵な URL を作成したいと考えています。スラッグを Mongo オブジェクトにマップするために、スラッグをハッシュして に変換し、そのObjectID利点を活用します。今私が探しているのは、BlogPost渡すだけでのインスタンスを作成しtitleslugand_idプロパティを自動的に生成できる透過的なメソッドです。

4

2 に答える 2

5

あなたのためにスラグ化して識別するセッターを使用しtitleてください:https://gist.github.com/3658511

オブジェクトが作成された後にのみコードが実行されるようにしたい場合はthis.isNew、セッターの内部を確認してください。

于 2012-09-06T16:59:41.057 に答える
2

これはあなたが探しているものですか?

次のように、モデルを保存する前に _id を作成する関数を定義できます: http://mongoosejs.com/docs/middleware.html

Mongoose がデフォルトで _id を作成した後にこのミドルウェアが呼び出される場合 (私の推測ではそうではありません)、_id オプションを使用して、Mongoose に _id を作成しないように指示できます。 http://mongoosejs.com/docs/guide.html#options

于 2012-08-31T17:33:05.213 に答える