2016-08-08 11 views
5

Was ich versuche zu tun ist ziemlich einfach, ich habe ein Array in einem Dokument;MongoDB Dokument einfügen "oder" Inkrementieren Feld, wenn in Array existiert

"tags": [ 
    { 
     "t" : "architecture", 
     "n" : 12 
    }, 
    { 
     "t" : "contemporary", 
     "n" : 2 
    }, 
    { 
     "t" : "creative", 
     "n" : 1 
    }, 
    { 
     "t" : "concrete", 
     "n" : 3 
    } 
] 

Ich möchte ein Array der anzuordnenden Objekte schieben wie

["architecture","blabladontexist"] 

Wenn Element gibt, möchte ich n Wert des Objekts erhöhen (in diesem Fall seine architecture),

und wenn nicht, füge es als neues Element hinzu (mit Wert n=0) { "t": "blabladontexist", "n":0}

Ich habe versucht $addToSet, $set, $inc, $upsert: true mit so vielen Kombinationen und konnte es nicht tun.

Wie können wir das in MongoDB tun?

+0

Haben Sie sich die Aggregationspipeline überhaupt angesehen? –

+1

Ich denke, Aggregation ist keine Lösung für das Problem, weil es nur Daten aus der Sammlung auswählen. @Sadettin Bilal Savaş benötigt Daten einfügen. Es hat nur einen Grund, wenn sich die Struktur der Sammlung ändert. – Kison

+0

Würden Sie die Struktur Ihrer Daten als Lösung betrachten? Zum Beispiel können Sie Verweise auf Entitäts-IDs "Tag" in Ihrem Array "Tags" haben. –

Antwort

0

Ich glaube nicht, dass dies in einem einzigen Befehl möglich ist.

MongoDB lässt nicht zu, dass $ set (oder $ setOnInsert) und $ inc das gleiche Feld in einem einzigen Befehl beeinflussen.

Sie müssen einen Aktualisierungsbefehl ausführen, um $ inc in das Feld zu schreiben, und wenn das keine Dokumente ändert (n = 0), setzen Sie das Feld auf den Standardwert.

Verwandte Themen