Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

194
Vistas
Mongoose no asigna automáticamente un _id a los elementos de mi matriz cuando los presiona, ¿por qué?

entonces, como dice el título, quiero que mongoose agregue automáticamente un campo _id a los objetos que inserto en mi matriz.

Aquí está mi esquema de mangosta:

 var playerModel = new Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: "Users", }, class: { type: String, required: true, }, level: { type: Number, default: 1, }, spells: { type: [String], default: ["", "", "", "", ""], }, inventory: [], toolbelt: { axe: [{}], pickaxe: [{}], fishingrod: [{}], hammer: [{}], saw: [{}], sewingkit: [{}], knife: [{}], gemkit: [{}], food: [{}], potion: [{}], }, gear: { weapon: [{}], head: [{}], chest: [{}], gloves: [{}], legs: [{}], shoes: [{}], earrings: [{}], ring: [{}], necklace: [{}], }, gold: { type: Number, default: 0, }, bagSize: { type: Number, default: 20, }, skills: { type: [userSkills], default: defaultSkills, }, });

Entonces, en última instancia, cuando envío un nuevo elemento a mi player.inventory, quiero que mongoose agregue automáticamente el _id, pero no lo hace. También en mi esquema, defino el inventario para que sea solo una matriz para poder insertar diferentes objetos que no tienen la misma estructura.

Así que cada vez que hago esto

 player.inventory.push(player.toolbelt.pickaxe[0]);

Quiero que mi elemento tenga todas sus propiedades de lo que inserté y también una propiedad _id generada automáticamente.

Ahora se ve así en mi base de datos: Imagen de mi campo Mongo DB

Espero haberme aclarado y alguien me pueda ayudar :)

¡Gracias a todos!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Para cualquier persona en el futuro, solucioné mi problema creando un nuevo esquema con la opción estricta establecida en falso:

 var inventoryItem = new Schema({}, { strict: false });

y luego decir que el inventario es:

 inventory: [inventorySchema],

Por alguna razón esto funciona, pero no esto:

 inventory: [{}, { strict: false }],

tan bueno saber! :)

Buenos días !

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda