2013-07-25 2 views
24

ich bin für die richtige Art und Weise suchen alle Elemente aus einem Array Feld zu entfernen (über alle Dokumente) in MongoDB - diese erscheinen gleichwertig ist, was empfohlen wird:Mongodb - richtiger Weg, um alle Elemente in einem Array-Feld zu löschen?

db.collection.update({}, { $pull : { 'myArray': {} }}, {multi:true}) 
(oder vielleicht eine andere Art und Weise?)

oder

db.collection.update({}, { $set : {'myArray': [] }} , {multi:true}) 

Antwort

22

die $set Variante schneller als $pull werden müssen Berechnungen auf Arrays tun. Ich bin mir eigentlich nicht einmal sicher, ob es funktioniert, da Sie mit Ihrer Anfrage wirklich keine Elemente entfernen.

3

Nur um sicher zu gehen, müssen Sie ein leeres Array behalten? Denn sonst ist es wahrscheinlich besser, $unset es.

Wenn Sie ein leeres Array halten müssen, ich glaube, Ihre $pull Anruf wird nicht funktionieren - ich glaube, es werden alle leeren Elemente aus dem Array entfernen, nicht alle Elemente.

2

Nach MongoDB offiziellen Dokument:

Wenn mit $ verwendet, um ein Array-Element entsprechen, ersetzt $ ungesetzt das Anpassungselement mit null statt aus dem Array das passende Element zu entfernen. Dieses Verhalten hält die Array-Größe und Elementpositionen konsistent.

Das $ set sollte der richtige Weg sein.

Verwandte Themen