Si tiene matrices de subdocumentos, Mongoose crea automáticamente identificadores para cada uno. Ejemplo:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
¿Hay alguna manera de decirle a Mongoose que no cree identificadores para objetos dentro de una matriz?
node.js
mongodb
mongoose
subdocument
Atlas
fuente
fuente

_idcampos incluso en la colección subSchema, o solo en el caso de que el subSchema se esté utilizando para incrustar como una matriz de elementos de subdocumentos? Pregunto esto particularmente debido a mi propia pregunta sobre SO hoy.{ _id: false }, ambos niveles de subesquema son sin identificadores. ¿Alguna forma de evitar este comportamiento?{ _id : true }?let studentSchema = new Schema({ studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] }, { _id: false });a esto:let studentSchema = new Schema({ _id: false, id: false, studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] });y eso detuvo la_idcreación en la creaciónstudentSchemapero retenida_iden los objetos en laperformancematriz de subdocumentos. No estoy seguro si ambos_id: falseyid: falseson necesarios.Puede crear subdocumentos sin esquema y evitarlos
_id. Simplemente agregue_id:falsea su declaración de subdocumento.Esto evitará la creación de un
_idcampo en su subdoc.Probado en mangosta
v5.9.10fuente
Además, si usa una sintaxis literal de objeto para especificar un
_id: falsesubesquema, también puede agregarlo para suprimirlo.fuente
Estoy usando Mongoose 4.6.3 y todo lo que tuve que hacer fue agregar _id: false en el esquema, no es necesario hacer un subesquema.
fuente
_ides un campo en lugar de una restricción._id = mongoose.Types.ObjectId()ese subdocumento, asigno explícitamente , ¿sería _id único en toda la colección?Puedes usar cualquiera de los dos
o
Verifique su versión de mangosta antes de usar la segunda opción
fuente
Si desea utilizar un esquema predefinido (con _id) como subdocumento (sin _id), puede hacer lo siguiente en teoría:
Pero eso no funcionó para mí. Entonces agregué que:
Ahora puedo incluir subSourceSchema en mi documento principal sin _id. No estoy seguro de que esta sea la forma limpia de hacerlo, pero funciona.
fuente