2017-07-03 3 views
0

Ich habe eine Sammlung in MongoDB. Und möchte ein Element aus dem Array entfernen.

Meine Sammlung "Benutzer" ist eine Reihe von Objekten.

Wenn ich tippe:

db.users.find({"tasks.task_id" : "h58sjIdj3jJZ"}).pretty() 

in Mongo Shell, erhalte ich dieses Ergebnis:

{ 
    "_id" : ObjectId("5955b45b7a4bf40544019359"), 
    "profile" : { 
    "name" : "Morning bay", 
    "email" : "[email protected]", 
    "phone" : "+1-641-155-88-84", 
    "description" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit" 
    }, 
    "tasks" : [ 
    { 
     "task_id" : "h58sjIdj3jJY", 
     "time" : "11:15 AM", 
     "date" : "07/01/2017", 
     "description" : "Make 1st call to John White" 
    }, 
    { 
     "task_id" : "h58sjIdj3jJZ", 
     "time" : "14:30 PM", 
     "date" : "07/09/2017", 
     "description" : "Send certificate and make Another call to J.White" 
    } 
    ], 
    "progress" : [ 
    { 
     "isActive" : "", 
     "description" : "" 
    } 
    ] 
} 

Also, jedes Element in meiner Sammlung wie folgt aussieht. Und es ist in Ordnung.

Aber jetzt möchte ich ein Element aus "Aufgaben" -Array in einem der Benutzer Elemente entfernen.

I-Typ:

db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}); 

ein um dieses Ergebnis zu erhalten:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) 

Ich las Dokumentation und Beispiele in sie ähnlich aussehen, so verstehe ich nicht, wo ein Fehler ist.

+0

Es sollte funktioniert. Was ist deine Mongodb-Version? –

+0

Können Sie {multi: true} als drittes Argument Ihres Updates hinzufügen? 'db.users.update ({}, {$ pull: {" Aufgaben ": {" Aufgaben_ID ":" h58sjIdj3jJZ "}}}, {multi: true});' –

+0

bereits versucht, aber es hilft nicht – alexfrize

Antwort

1

Sie verwenden {} in Update-Suchabfrage, was standardmäßig find any document bedeutet, und dann ändern Sie ihre Aufgabenliste {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}.

Also, wahrscheinlich ein anderes Dokument geändert wird (was nicht Aufgabe der ID enthalten können oder h58sjIdj3jJZ aber in diesem Fall seine irrelevant, ob es sie hat oder nicht)

Sie haben 2 Möglichkeiten: Verwendung:

db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}}, { multi: true });

was schließlich jedes Dokument in db berührt,

OR

make Suchbegriff spezifischere (id liefern oder für Artikel suchen mit task_id in Aufgaben)

db.users.update({ "tasks.task_id": "h58sjIdj3jJZ"}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}});

+1

Ja! Ich habe 'db.users.update ({" tasks.task_id ":" h58sjIdj3jJZ "}, {$ pull: {" tasks ": {" task_id ":" h58sjIdj3jJZ "}}})' verwendet und es hat geholfen! Vielen Dank! – alexfrize

0

Ich habe es auf einem MongoDB Terminal Online getestet und Ihre Abfrage korrekt das Dokument gezogen.

Hier ist die output.

Haben Sie dieses Problem mit der Shell oder mit einem ODM (wie Mungo)?

+0

Ich benutze MongoJS anstelle von Mongoose. Und ja, da ist das gleiche Problem. Es entfernt kein Element aus dem Aufgaben-Array. – alexfrize

Verwandte Themen