ネストされたオブジェクト (オブジェクトの配列など) を含むドキュメントを作成する場合、各オブジェクトには独自の _id が与えられます。たとえば、私のスキーマは次のようになります。
mongoose = require "mongoose"
Schema = mongoose.Schema
schema = new Schema
name:
type: String
required: true
unique: true
trim: true
lists: [
list:
type: Schema.Types.ObjectId
required: true
ref: "List"
allocations: [
allocation:
type: Number
required: true
]
]
createdAt:
type: Date
default: Date.now
updatedAt:
type: Date
# Ensure virtual fields are serialised.
schema.set "toJSON",
virtuals: true
exports = module.exports = mongoose.model "Portfolio", schema
ドキュメントが最終的に作成されるときに、配列内のすべてのオブジェクトと同様に、配列内のすべてのオブジェクトにlists
_id が与えられます。これはやり過ぎでドキュメントを肥大化させるように思えますが、MongoDB (または Mongoose) がドキュメントにこの追加情報を含める必要がある理由はありますか? そうでない場合は、唯一の _id がルート ドキュメントにあるように、それが起こらないようにしたいと思います。allocation
lists.allocations
さらに、Mongoose は仮想id
for を自動的に作成します。_id
これは、クライアント コードが field を想定しているため必要ですid
。これが、仮想を JSON で返す理由です。ただし、_id
ルートだけでなくドキュメント全体にフィールドがあるため、この仮想はそれらすべてを複製します。追加の _id フィールドを防ぐ方法がない場合、仮想をルート ドキュメントの _id のみに適用するにはどうすればよいですか? または、私がやろうとしていることを行うためのより良い方法がある場合、それは何でしょうか?