답변:
간단합니다. 하위 스키마에서 이것을 정의 할 수 있습니다.
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가 컬렉션 전체에서 고유합니까?
사전 정의 된 스키마 (_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에 대한 내 자신의 질문 때문에 이것을 특히 묻습니다 .