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
_id
campos 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_id
creación en la creaciónstudentSchema
pero retenida_id
en los objetos en laperformance
matriz de subdocumentos. No estoy seguro si ambos_id: false
yid: false
son necesarios.Puede crear subdocumentos sin esquema y evitarlos
_id
. Simplemente agregue_id:false
a su declaración de subdocumento.Esto evitará la creación de un
_id
campo en su subdoc.Probado en mangosta
v5.9.10
fuente
Además, si usa una sintaxis literal de objeto para especificar un
_id: false
subesquema, 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
_id
es 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