nodejs node new example disable custom create collection _id node.js mongodb express mongoose

node.js - node - Documentos de referencia con ObjectId al guardar en mangosta



new objectid (1)

Tengo los siguientes esquemas:

// ingredient var ingredSchema = new Schema({ name: String, cost: Number }); // order var orderSchema = new Schema({ cusName: String, ingredients: [{type: Schema.Types.ObjectId, ref: ''Ingredient''}] }); // create model var Ingredient = mongoose.model(''Ingredient'', ingredSchema); var Order = mongoose.model(''Order'', orderSchema);

Ya guardé varios ingredientes en los ingredientes de una colección y tengo una IU donde los usuarios eligen un conjunto de ingredientes para sus hamburguesas. Luego trato de guardar una orden para una hamburguesa en otra orders dentro de las mismas burgers base de datos como esta:

// get order info from the form var newOrder = new Order({ cusName: req.body.name, ingredients: req.body.ingredients }); newOrder.save(function(err) { if (err) return console.log(''Could not save your new order'', err); res.redirect(''/order''); });

La llamada para guardar una orden genera el siguiente error:

{ message: Cast to ObjectId failed for value xxx at path ''ingredients'', name: ''CastError'', type: ObjectId, value: xxx, path: ''ingredients'' }

Yo uso la versión de mangosta 3.6.11. Por favor, ayúdame a hackear esto.

PD: req.body.ingredients es una matriz construida a partir de casillas de verificación.


Hay 2 posibles problemas con su código ahora mismo:

1. req.body.ingredients no será una matriz de ObjectId s, y la mangosta lo quiere bien (dudo de este).

Debes lanzar todos los ingredientes a ObjectId primero. Suponiendo que req.body.ingredients es una matriz, entonces harías algo como esto:

var casted = req.body.ingredients.map(function( ingredient ) { return mongoose.Types.ObjectId(ingredient); });

No probé esto, a ver si funciona para ti.

2. Mangosta está tratando de lanzar sus ingredientes, pero uno de ellos no es un ObjectId válido

ObjectId debe estar compuesto por 24 caracteres hexadecimales, verifica si estás pasando valores como este a Mongoose.

Por favor, publique el resultado si uno de ellos trabaja para usted :)