回答:
簡単です、これをサブスキーマで定義できます:
var mongoose = require("mongoose");
var subSchema = mongoose.Schema({
//your subschema content
},{ _id : false });
var schema = mongoose.Schema({
// schema content
subSchemaCollection : [subSchema]
});
var model = mongoose.model('tablename', schema);
{ _id: false }
、サブスキーマの両方のレベルにIDがありません。この動作を回避する方法はありますか?
{ _id : true }
か?
let studentSchema = new Schema({ studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] }, { _id: false });
ように変更することです。これにより、サブドキュメントの配列内のオブジェクトの作成はlet studentSchema = new Schema({ _id: false, id: false, studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] });
停止し_id
ましたstudentSchema
が_id
、オブジェクトの作成は保持されましたperformance
。_id: false
との両方id: false
が必要かどうかは不明です。
私はmongoose 4.6.3を使用しています。スキーマに_id:falseを追加するだけで、サブスキーマを作成する必要はありません。
{
_id: ObjectId
subDocArray: [
{
_id: false,
field: "String"
}
]
}
_id
制約ではなくフィールドです。
_id = mongoose.Types.ObjectId()
場合、その_idはコレクション全体で一意になりますか?
どちらでも使えます
var subSchema = mongoose.Schema({
//subschema fields
},{ _id : false });
または
var subSchema = mongoose.Schema({
//subschema content
_id : false
});
2番目のオプションを使用する前にマングースのバージョンを確認してください
定義済みのスキーマ(_idあり)をサブドキュメント(_idなし)として使用する場合は、理論的には次のようにします。
const sourceSchema = mongoose.Schema({
key : value
})
const subSourceSchema = sourceSchema.clone().set('_id',false);
しかし、それは私にはうまくいきませんでした。だから私はそれを追加しました:
delete subSourceSchema.paths._id;
これで、_idなしでsubSourceSchemaを親ドキュメントに含めることができます。これがクリーンな方法かどうかはわかりませんが、うまくいきます。
_id
はsubSchemaコレクションでもフィールドをスキップしますか、またはsubSchemaがサブドキュメントアイテムの配列として埋め込むために使用されている場合のみですか?今日私がSO について自分自身の質問があるので、私はこれを特に尋ねます。