하위 문서 배열이 있으면 Mongoose는 각 배열에 대한 ID를 자동으로 만듭니다. 예:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Mongoose에게 배열 내 객체의 ID를 만들지 않도록 지시하는 방법이 있습니까?
답변
간단합니다. 하위 스키마에서 이것을 정의 할 수 있습니다.
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
있습니다. _id:false
하위 문서 선언에 추가 하십시오.
var schema = new mongoose.Schema({
field1:{
type:String
},
subdocArray:[{
_id:false,
field :{type:String}
}]
});
이렇게하면 _id
하위 문서에서 필드를 만들 수 없습니다.
몽구스에서 테스트 v5.9.10
답변
또한 하위 스키마를 지정하기 위해 객체 리터럴 구문을 사용하는 경우 _id: false
이를 추가 하기 위해 추가 할 수도 있습니다 .
{
sub: {
property1: String,
property2: String,
_id: false
}
}
답변
mongoose 4.6.3을 사용하고 있으며 스키마에 _id : false를 추가하기 만하면 하위 스키마를 만들 필요가 없습니다.
{
_id: ObjectId
subDocArray: [
{
_id: false,
field: "String"
}
]
}
답변
당신은 하나를 사용할 수 있습니다
var subSchema = mongoose.Schema({
//subschema fields
},{ _id : false });
또는
var subSchema = mongoose.Schema({
//subschema content
_id : false
});
두 번째 옵션을 사용하기 전에 몽구스 버전을 확인하십시오
답변
사전 정의 된 스키마 (_id 포함)를 하위 문서 (_id 제외)로 사용하려면 이론적으로 다음과 같이 할 수 있습니다.
const sourceSchema = mongoose.Schema({
key : value
})
const subSourceSchema = sourceSchema.clone().set('_id',false);
그러나 그것은 나를 위해 작동하지 않았습니다. 그래서 나는 그것을 추가했다 :
delete subSourceSchema.paths._id;
이제 _id없이 부모 문서에 subSourceSchema를 포함시킬 수 있습니다. 이것이 깨끗한 방법인지는 모르겠지만 작동합니다.