0

_id 変数を id に変換したい。

したがって、作成するすべてのスキーマに仮想「id」フィールドを追加したいと思います。これにより、モデルの「id」フィールドにアクセスするたびに「_id」の値が返されます。

ドキュメントhttp://mongoosejs.com/docs/2.7.x/docs/virtuals.htmlから 、最初にスキーマを作成してから、仮想「id」フィールドを個別に適用する必要があることがわかりました。

仮想フィールドをベースに追加するだけでmongoose.Schema、新しいスキーマを作成するたびに、個々のスキーマごとに手動で作業することなく、すべてが仮想フィールドを持つようになります。

編集 :

私も Backbone.Model を使用しており、モデルごとに「id」フィールドを作成しました。フロント エンド コードで単に使用 ID を取得すると、ID フィールドが存在しないというエラーが表示されます。しかし、各モデルにidAttributeを「_id」として設定すると、すべてがうまくいきます。つまり、バックボーン モデルには _id が必要であり、マングース スキーマの背後にある理由は id ではなく _id です。だから私はそれを解釈できますか、マングースは_idにマップされた仮想IDを自動的に追加しませんか? 私が間違っている場合は修正してください。

4

1 に答える 1

1

バックボーンの場合、「id」はデフォルトの idAttribute 名であるため、そこにコードを追加しないでください。すべてが意図したとおりに機能します。

マングースの場合、答えは「複雑です」に要約されますが、主なポイントは次のとおりです。

  • デフォルトでは、mongoose は各スキーマに "id" と呼ばれる仮想値を与えます。これは、ドキュメントの _id を文字列として表したものです。
  • ただし、デフォルトで.toJSONはバーチャルは含まれていないため、ブラウザでバックボーンにマングース ドキュメントを送信すると、「id」ではなく「_id」のみが取得されます。
  • バーチャルを含む JSON 表現をすばやく取得するには、 を使用しますmyModelInstance.toJSON({virtuals: true})。「_id」と「id」の両方を取得します
  • toObject と toJSONの変換オプションを読んで、できることとその方法の全体像を把握する必要がありますが、要点は (ドキュメントから直接の例に基づいて)

// specify the transform schema option
if (!schema.options.toJSON) schema.options.toJSON = {};
schema.options.toJSON.transform = function (doc, ret, options) {
  // remove the _id of every document before returning the result
  delete ret._id;
}
schema.options.toJSON.virtuals = true;
于 2013-09-10T06:00:30.313 に答える