function addItem(list_id, item_name) {
if(!item_name && !list_id)
return;
lists.update({_id:list_id}, {$addToSet:{items:{Name:item_name}}});
}
セットにオブジェクトを追加しようとしているようです。シミュレーションでエラーが発生します。そのエラーを調べてみましょう。エラーが発生するコード:
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 { ...
ええと、 throw Error( "Cannot apply $ addToSet修飾子を非配列に適用できます。")
。
コードを見てください:
Object
Category: "Tools"
_id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
items: Object
...
アイテムコード> はオブジェクトであり、配列ではありません!エラーが発生します。
$ addToSet
できますか モンゴのオブジェクトに?コードを見てみましょう。
https://github.com/mongodb/mongo/blob/4a4f9b1 /db/update.cpp
case ADDTOSET: {
uassert( 12592 , "$addToSet can only be applied to an array" , in.type() == Array );
...
}
いいえ!現代のコードベースは広大であるため、これは古いMongoコードからのものですが、同じことです。
insert
が1つだけ見つかりました コード内。
'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);
}
}
},
lists.insert({Category:catVal、items:[]})
をお試しください 。アイテムが最初に使用されたときにオブジェクトではなく配列として初期化されるようにします。
また、 $ addToSet
はないと思います とにかく希望する方法で配列内のオブジェクトを比較するので、別のコレクション Items
を作成することを検討してください categoryId
を含む 。
ある場所で機能していて、別の場所では機能していないのは、まったくの偶然です。