sql >> Database teknologi >  >> NoSQL >> MongoDB

Meteor - MongoDB-fejl:Kan ikke anvende $addToSet-modifikator til ikke-array

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

Det ser ud til, at du prøver at tilføje et objekt til et sæt. Du får en fejl ved simulering. Lad os undersøge den fejl. Koden, der fejler:

https://github.com/meteor/meteor/blob /master/packages/minimongo/modify.js

 $addToSet:funktion (mål, felt, arg) { var x =mål[felt]; if (x ===udefineret) mål[felt] =[arg]; else if (!(x forekomst af Array)) throw Error("Kan ikke anvende $addToSet modifier til ikke-array"); andet { ... 

Åh åh, kast fejl("Kan ikke anvende $addToSet-modifikator på ikke-array.") .

Se på din kode:

Objektkategori:"Værktøjer" _id:"eaa681e1-83f2-49f2-a42b-c6d84e526270"... elementer:Objekt... 

elementer er et objekt, ikke et array! Det vil fejle.

Kan du $addToSet til et objekt med Mongo? Lad os se på koden.

https://github.com/mongodb46b46ad/mongodb46b46cd/eaaa9e4eb6d00aaa466c/db/update.cpp">https://github.com/mongodb46b46aed46a9aee4ee3e3e3ead47aad47aad4e6ad4e6aed46aed46aed46aed46aed46ead46aed46aed46aed46aed46aed46aed4ee3eeeee /db/update.cpp

 case ADDTOSET:{ uassert( 12592 , "$addToSet kan kun anvendes på et array" , in.type() ==Array ); ... } 

Nix! Dette er fra gammel Mongo-kode, fordi den moderne kodebase er vidtstrakt, men det samme.

Jeg fandt kun én indsæt i din kode.

'keyup #add-category':function(e, t) { if (e.which ===13) { var catVal =String(e.target.value || ""); if (catVal) { lists.insert({Kategori:catVal}); Session.set('adding_category', falsk); } }}, 

Prøv lists.insert({Category:catVal,items:[]}) . Så elementer initialiseres som et array snarere end et objekt, da det blev brugt første gang.

Jeg tror heller ikke $addToSet sammenligner objekter i et array, som du alligevel gerne vil, så overvej at lave en separat samling Items der indeholder et categoryId .

Det er rent tilfældigt, at det arbejder et sted og ikke et andet.



  1. Brug $cond inden for $match i mongoDB-aggregering

  2. MongoDB-aggregat, hvordan man tilføjerToSet hvert element af array i gruppepipeline

  3. Hvordan bruger du arrayFilters med mongoose 5.x.x?

  4. Android Studio:opretter forbindelse til MongoDB-server med Mongo Java Driver