tengo una colección mongo que se ve así:
{ name: string _id: (auto set) items: array[ name: string url: string items: array[ { name: string, url: string, items: [] } ] ] } Estoy usando findByIdAndUpdate (con mangosta) para agregar un elemento a la matriz de elementos:
Menu.findByIdAndUpdate( req.body.parentid, { $push: { items: { name: req.body.item.name, url: req.body.item.url, items: [] } } }, { safe: true, upsert: true, new: true }, function(err, model) { if (err !== null) { console.log(err); } } ); Esto funciona bien, pero no agrega un _id a cada objeto insertado en la matriz de items . Y realmente necesito una identificación para cada uno.
Supongo que proviene del método utilizado, findByIdAndUpdate , ya que parece más una actualización que una inserción. Si mi pensamiento es correcto.
Usando mongodb 3.2.10 y mongoose 4.7.6.
Cualquier ayuda sería realmente apreciada. Gracias.
EDITAR: el _id: (auto set) no es real, se agrega automáticamente a través de mongo. Pero solo en los objetos de nivel superior.
Encontré la solución en este hilo: mongoDB: Creando un ObjectId para cada nuevo niño agregado al campo de matriz
básicamente, agregó
var ObjectID = require('mongodb').ObjectID;
y luego forzando la creación:
$push: { items: { _id: new ObjectID(), name: req.body.item.name, url: req.body.item.url, items: [] } }No necesita especificar _id: (configuración automática) en el esquema de mongoose, agregará automáticamente _id único con cada documento.
si no define _id en Schema, mongoose agrega automáticamente un _id al elemento de matriz. por ejemplo:
const countrySchema = new Schema({ name: { type: String }, cities: [ { // don't define _id here. name: String } ], });ahora, cuando inserta una fila, el resultado es algo como esto:
{nombre: 'Irán', ciudades: [{_id: 6202902b45f0d858ac141537, nombre: 'Tabriz'}]}