Mam następujące schematy:Dokumenty źródłowe z objectID przy zapisie w mangusta
// 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);
już zapisane składniki pęczek w kolekcji ingredients
i mają UI, gdzie użytkownicy wybrać zestaw składników do ich hamburgery. I następnie spróbuj zapisać zlecenie na hamburgera w innej kolekcji orders
w tej samej bazie danych burgers
tak:
// 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');
});
wywołanie zapisać rozkaz generuje następujący błąd:
{ message: Cast to ObjectId failed for value xxx at path 'ingredients',
name: 'CastError',
type: ObjectId,
value: xxx,
path: 'ingredients' }
używam mongoose wersja 3.6.11. Pomóż mi to zhakować.
PS: req.body.ingredients jest tablicą zbudowaną z pól wyboru.
Pobiegłem opcję 1 i wyrazić zgłasza błąd: 'Error: Argument przekazany musi być pojedynczym String 12 bajtów lub ciąg 24 znaków szesnastkowych'. Nadal staram się owijać głowę wokół tego "ObjectId". – gabeno
Sprawdź teraz opcję 2. Nie możesz przekazywać poprawnych 'ObjectId's. – gustavohenke
Masz to! Opcja druga to gwoździe. Problem polegał na tym, że miałem 'ingred.name' zapełnione w' req.body.ingredients' zamiast 'ingred.id '. Dzięki za heads up. – gabeno