function addItem(list_id, item_name) {
if(!item_name && !list_id)
return;
lists.update({_id:list_id}, {$addToSet:{items:{Name:item_name}}});
}
Sembra che tu stia cercando di aggiungere un oggetto a un set. Stai ricevendo un errore sulla simulazione. Indaghiamo su quell'errore. Il codice che genera errori:
https://github.com/meteor/meteor/blob /master/packages/minimongo/modify.js
$addToSet: function (target, field, arg) {
var x = target[field];
if (x === undefined)
target[field] = [arg];
else if (!(x instanceof Array))
throw Error("Cannot apply $addToSet modifier to non-array");
else { ...
Uh oh, throw Error("Cannot apply $addToSet modifier to non-array.")
.
Guarda il tuo codice:
Object
Category: "Tools"
_id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
items: Object
...
items
è un oggetto, non un array! Verrà visualizzato un errore.
Puoi $addToSet
ad un oggetto con Mongo? Diamo un'occhiata al codice.
https://github.com/mongodb/mongo/blob/4a4f9b1d6dc79d1aea64a7cd7 /db/aggiornamento.cpp
case ADDTOSET: {
uassert( 12592 , "$addToSet can only be applied to an array" , in.type() == Array );
...
}
No! Questo proviene dal vecchio codice Mongo, perché la base di codice contemporanea è tentacolare, ma è la stessa cosa.
Ho trovato solo un insert
nel tuo codice.
'keyup #add-category': function(e, t) {
if (e.which === 13) {
var catVal = String(e.target.value || "");
if (catVal) {
lists.insert({Category:catVal});
Session.set('adding_category', false);
}
}
},
Prova lists.insert({Category:catVal,items:[]})
. In modo che gli elementi vengano inizializzati come un array anziché come un oggetto quando è stato utilizzato per la prima volta.
Inoltre, non credo che $addToSet
confronta gli oggetti in un array come vorresti comunque, quindi considera di creare una raccolta separata Items
che contiene un categoryId
.
È puramente una coincidenza che stia lavorando in un posto e non in un altro.