MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Meteor - Błąd MongoDB:nie można zastosować modyfikatora $addToSet do nie-tablicy

function addItem(list_id, item_name) {
    if(!item_name && !list_id)
      return;
    lists.update({_id:list_id}, {$addToSet:{items:{Name:item_name}}});
  }

Wygląda na to, że próbujesz dodać obiekt do zestawu. Podczas symulacji pojawia się błąd. Zbadajmy ten błąd. Kod z błędami:

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

Och, throw Error("Cannot apply $addToSet modifier to non-array.") .

Spójrz na swój kod:

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

items jest obiektem, a nie tablicą! Wystąpi błąd.

Czy możesz $addToSet do obiektu z Mongo? Spójrzmy na kod.

https://github.com/mongodb/mongod4f979db1b /db/update.cpp

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

Nie! To pochodzi ze starego kodu Mongo, ponieważ współczesna baza kodu jest rozległa, ale to samo.

Znalazłem tylko jedną insert w kodzie.

'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);
    }
  }
},

Wypróbuj lists.insert({Category:catVal,items:[]}) . Dzięki temu elementy są inicjowane jako tablica, a nie jako obiekt, gdy zostały po raz pierwszy użyte.

Poza tym nie sądzę, aby $addToSet porównuje obiekty w tablicy tak, jak chcesz, więc rozważ utworzenie oddzielnej kolekcji Items który zawiera categoryId .

To czysty przypadek, że działa w jednym miejscu, a nie w innym.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. dodaj użytkownika do mongodb przez python

  2. Model Mongoose TypeError:Schemat nie jest konstruktorem

  3. ReactiveMongo:Jak przekonwertować BSON zwrócony przez FindAndModify do JSON

  4. elementy aktualizacji mongoid w tablicy

  5. importowanie schematu mongoose do innego pliku schematu powoduje, że importowany schemat jest niezdefiniowany