2017-01-02 9 views

Antwort

2

Verwenden $pull, um Elemente aus einem Array von Elementen zu entfernen unten wie:

db.User.update(
    { }, 
    { $pull: { event: { _id: 12346 } } } 
) 

Die $ Pull Bediener entfernt von einem vorhandenen Array alle Instanzen eines Wert oder die Werte, die einen bestimmten Zustand entsprechen.

Leeres Objekt im ersten Parameter ist query, um die Dokumente zu finden. Die obige Methode entfernt die Elemente mit _id: 12345 in dem Array event in allen Dokumenten in der Auflistung. Wenn mehrere Elemente im Array sind, die die Bedingung entsprechen würde, setzen multi Option auf true, wie unten dargestellt:

db.User.update(
    { }, 
    { $pull: { event: { _id: 12346 } } }, 
    { multi: true} 
) 
+0

Wenn ich dieses Recht lese, wird alles nach 'event {_id: 123456)' suchen und entfernen, richtig? Bei Bedarf kann ich nur eine Instanz entfernen, indem ich eine ID in die erste Bedingung setze, richtig? – illcrx

+0

Es werden alle 'Elemente' mit' _id: 123456' aus dem Array 'event' in allen Dokumenten in der Sammlung' User' entfernt. Wenn Sie alle übereinstimmenden Dokumente entfernen möchten, können Sie einfach 'remove' Methode verwenden – superUser

+0

' $ pull' löscht bestimmte Werte/Werte in einem vorhandenen Array und nicht das gesamte Dokument, das der Bedingung entspricht. Wenn Sie das gesamte Dokument, das der Bedingung entspricht, löschen möchten, verwenden Sie 'db.collection.remove' – superUser

1

FindOne für id suchen, wenn nicht, dann anders gefunden err entfernen funktioniert.

User.findOne({id:12346}, function (err, User) { 
     if (err) { 
      return; 
     } 
     User.remove(function (err) { 
      // if no error, your model is removed 
     }); 
    }); 
Verwandte Themen