sql >> Databasteknik >  >> NoSQL >> MongoDB

Meteor - MongoDB-fel:Kan inte tillämpa $addToSet-modifierare på icke-array

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

Det verkar som om du försöker lägga till ett objekt till en uppsättning. Du får ett felmeddelande vid simulering. Låt oss undersöka det felet. Koden som felar:

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

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

Titta på din kod:

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

items är ett objekt, inte en array! Det kommer att felas.

Kan du $addToSet till ett objekt med Mongo? Låt oss titta på koden.

https://github.com/mongodb46b46ad/mongodb46b46ed/blog9b46b4aad47a7aad4e4aee3ee4ee4ee4ead4e4ead47aad4e4ae6d4e4ad4e4aad4e4ad4e4ad4ead4e4aed4e4aed4e4aed4e4aed4e3eeeee /db/update.cpp

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

Nej! Det här är från gammal Mongo-kod, eftersom den samtida kodbasen är spretig, men samma sak.

Jag hittade bara en insert i din kod.

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

Försök med lists.insert({Category:catVal,items:[]}) . Så att objekt initieras som en array snarare än ett objekt när det först användes.

Jag tror inte heller $addToSet jämför objekt i en array på det sätt som du ändå skulle vilja, så överväg att skapa en separat samling items som innehåller ett categoryId .

Det är en ren slump att det fungerar på ett ställe och inte på ett annat.



  1. Hur definierar man TTL för redis-strömmar?

  2. I Jongo, hur man hittar flera dokument från Mongodb genom en lista med ID:n

  3. Hur man tar bort Redis på "meddelande"-lyssnare

  4. Hur kan jag hitta ett dokument som är inbäddat i MongoDB?