2016-07-31 6 views
1

Ich führe eine update Anweisung auf einer mongodb Datenbank und löschte mein Dokument! Was habe ich falsch gemacht?MongoDb db.Collection.update() löschte mein Dokument

Dies ist die Update-Anweisung:

db.Question.update({Name: "IsSomeCompany"}, {ButtonValues: [0, 1, 2] }) 

I Robomongo und die Antwort war Updated 1 record(s) in 22ms bin mit aber wenn ich die Datenbank der Datensatz gegangen wurde überprüft. Was fehlt mir hier?

+1

Was meinst du mit "record"? Soll es sich um Dokumentfelder oder das gesamte Dokument handeln? Nun, wussten Sie, dass Ihre Aktualisierungsabfrage keinen "$ set" oder "$ unset" Operator hat? – felipsmartins

+1

Sie * Ersetzte * ein Dokument, das mit '{Name:" IsSomeCompany "}' Kriterien mit '{ButtonValues: [0, 1, 2]}' übereinstimmt. Wenn Sie Teile des abgeglichenen Dokuments aktualisieren möchten, verwenden Sie den Operator $ set. –

+3

In diesem Fall spielt das verwendete Werkzeug keine Rolle. Ich verwende diese Syntax zum Aktualisieren mehrerer Dokumente. . Db.getCollection ('YourDocument') update ( { "matchingField": "matchingValue"}, {$ gesetzt: { "Feld": "Wert"} }, { multi: true} ) – Hamedz

Antwort

3

Wenn Sie nur ein Feld zu aktualisieren versuchen, sollten Sie die $ set-Operator verwenden. Aber wenn Sie das Dokument ersetzen möchten, hatte ich das gleiche Problem mit Mongo und Meteor. Ich habe in der Mongo-Dokumentation gefunden, dass Sie kein $ -Operator verwenden und Feld/Wert-Paare übergeben müssen:

Die folgende Operation übergibt ein Dokument, das nur Feld- und Wertepaare enthält. Das Dokument ersetzt das ursprüngliche Dokument vollständig, mit Ausnahme des Felds _id.

db.books.update({ item: "XYZ123" }, 
    { 
    item: "XYZ123", 
    stock: 10, 
    info: { publisher: "2255", pages: 150 }, 
    tags: [ "baking", "cooking" ] 
    }) 

https://docs.mongodb.com/manual/reference/method/db.collection.update/#example-update-replace-fields

Aber beide in Robomongo und Meteor Methode bekam dies das entfernte Dokument.

Der einzige Weg, den ich gefunden habe, ist, den Operator $ set zu verwenden und jedes Feld zu ersetzen. Dies würde aber versuchen, das Mongo ‚_id‘ zu aktualisieren, so dass ich denke, ist nur eine Abhilfe ...

db.books.update({ item: "XYZ123" }, 
    { 
     $set: { 
     item: "XYZ123", 
     stock: 10, 
     info: { publisher: "2255", pages: 150 }, 
     tags: [ "baking", "cooking" ] 
     } 
    }) 

Was soll ich hier fehlt? :/