[node.js] 하위 문서 배열 항목에 대해 Mongoose가 _id 속성을 만들지 않도록 중지

하위 문서 배열이 있으면 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를 포함시킬 수 있습니다. 이것이 깨끗한 방법인지는 모르겠지만 작동합니다.


답변