MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Meteor - Lỗi MongoDB:Không thể áp dụng công cụ sửa đổi $ addToSet cho không phải mảng

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dấu thời gian MongoDb

  2. $ strLenBytes so với $ strLenCP trong MongoDB:Sự khác biệt là gì?

  3. Cách lọc mảng trong tài liệu con với MongoDB

  4. có một cuộc gọi lại lỗi kết nối mongoose không

  5. Php Nhập đệ quy các danh mục vào MongoDB