MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Meteor - MongoDB грешка:Не може да се приложи модификатор $addToSet към не-масив

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 modifier to non-array.") .

Вижте кода си:

Object
  Category: "Tools"
  _id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
  items: Object
...

items е обект, а не масив! Ще излезе грешка.

Можете ли да $addToSet към обект с Монго? Нека да разгледаме кода.

https://github.com/mongodb/mongo/blob/4a4f9b1d6dc79d1ba4a7d7eaa9e4eb6d00aa466c /db/update.cpp

 case ADDTOSET: {
            uassert( 12592 ,  "$addToSet can only be applied to an array" , in.type() == Array );
            ...
        }

не! Това е от стария код на Mongo, защото съвременната кодова база е обширна, но същото.

Намерих само една insert във вашия код.

'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 .

Чисто съвпадение е, че работи на едно място, а не на друго.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. PowerShell не е съвместим с методите на драйвера на MongoDB C#?

  2. Как да заявявам документи с помощта на полето _id в драйвера на Java mongodb?

  3. Свързване и създаване на MongoDB присъединявания с помощта на SQL:Част 1

  4. Какво е курсор в MongoDB?

  5. Как да обобщим по година-месец-ден в различна часова зона