function addItem(list_id, item_name) {
if(!item_name && !list_id)
return;
lists.update({_id:list_id}, {$addToSet:{items:{Name:item_name}}});
}
Het lijkt erop dat u een object aan een set probeert toe te voegen. Je krijgt een foutmelding bij de simulatie. Laten we die fout onderzoeken. De code die fouten maakt:
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.")
.
Kijk naar je code:
Object
Category: "Tools"
_id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
items: Object
...
items
is een object, geen array! Er zal een fout optreden.
Kun je $addToSet
naar een object met Mongo? Laten we naar de code kijken.
case ADDTOSET: {
uassert( 12592 , "$addToSet can only be applied to an array" , in.type() == Array );
...
}
Nee! Dit is van de oude Mongo-code, omdat de hedendaagse codebasis uitgestrekt is, maar hetzelfde.
Ik heb maar één insert
gevonden in uw code.
'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);
}
}
},
Probeer lists.insert({Category:catVal,items:[]})
. Zodat items worden geïnitialiseerd als een array in plaats van een object toen het voor het eerst werd gebruikt.
Ik denk ook niet dat $addToSet
vergelijkt objecten in een array zoals u dat toch zou willen, dus overweeg om een aparte verzameling Items
te maken die een categoryId
. bevat .
Het is puur toeval dat het op de ene plek werkt en niet op de andere.