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 :)