function addItem(list_id, item_name) {
if(!item_name && !list_id)
return;
lists.update({_id:list_id}, {$addToSet:{items:{Name:item_name}}});
}
Có vẻ như bạn đang cố thêm một đối tượng vào một tập hợp. Bạn đang gặp lỗi khi mô phỏng. Hãy điều tra lỗi đó. Mã lỗi:
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 { ...
Rất tiếc, Lỗi throw Error("Cannot apply $addToSet modifier to non-array.")
.
Nhìn vào mã của bạn:
Object
Category: "Tools"
_id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
items: Object
...
items
là một đối tượng, không phải là một mảng! Nó sẽ xảy ra lỗi.
Bạn có thể $addToSet
được không với một đối tượng với Mongo? Hãy xem mã.
https://github.com/mongodb1ba4a4a7aa9aa4aa9aa9aa /db/update.cpp
case ADDTOSET: {
uassert( 12592 , "$addToSet can only be applied to an array" , in.type() == Array );
...
}
Không! Đây là từ mã Mongo cũ, vì cơ sở mã hiện đại đang trải dài, nhưng giống nhau.
Tôi chỉ tìm thấy một insert
trong mã của bạn.
'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);
}
}
},
Hãy thử lists.insert({Category:catVal,items:[]})
. Vì vậy, các mục đó được khởi tạo dưới dạng một mảng chứ không phải là một đối tượng khi nó được sử dụng lần đầu tiên.
Ngoài ra, tôi không nghĩ $addToSet
so sánh các đối tượng trong một mảng theo cách bạn muốn, vì vậy hãy cân nhắc tạo một bộ sưu tập riêng biệt Items
có chứa categoryId
.
Nó hoàn toàn là một sự trùng hợp ngẫu nhiên khi nó đang hoạt động ở một nơi chứ không phải nơi khác.