2017-12-26 1 views
0

Ich entwickle eine App in Express, die mongodb verwendet. Ich schrieb den Code, um die Daten einzufügen und zu aktualisieren, indem ich die Speichermethode nutze, die gut funktioniert.Aktualisieren bestimmter Felder nur mit save-Methode in mongodb

Arbeits Code

dbconnect.collection('profiles').save(data, function (err, result) { 
      if (err) 
       return res.send({ success: false, message: "Error saving into database" }); 
      result = JSON.parse(JSON.stringify(result)); 
      if (_.isEmpty(result) || !result.ok) 
       return res.send({ success: false, message: "Unidentified error." }) 
      return res.send({ success: true }); 
     }); 

Wenn ich die Daten aktualisieren, das gesamte Dokument wird immer aktualisiert. Ja wie gesagt. Aber ich möchte ein Feld auslassen.

Lassen Sie sagen, meine Felder

username, password, email, postal_address 

sind, wenn ich ohne _id passieren, schafft sie ein neues _id und das Dokument eingefügt wird.

Wenn der Benutzer versucht, die postal_address zu aktualisieren, löscht er das Kennwort, da die Daten kein Kennwortfeld enthalten. Es ist wie das ganze Dokument neu schreiben.

Da der Code geschrieben wurde und ich nicht den Code in zwei Teile als einfügen und aktualisieren möchte, bin ich auf der Suche nach einer Möglichkeit, einen Teil des Dokuments mit Hilfe von speichern zu aktualisieren.

Hoffe ich machte meine Frage klar.

+1

Sie können 'update' auch mit der Option' upsert' verwenden, es wäre also nur ein Schritt. – Josh

+0

Es wird erklärt [hier] (https://docs.mongodb.com/manual/reference/method/db.collection.update/#upsert-option) – Josh

+0

Endlich habe ich meinen Code geteilt. Danke für Ihre Zeit und Update –

Antwort

1

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie nicht mehrere Befehle für Einfügungen und Aktualisierungen verwenden.

Sie können den Befehl update verwenden, wobei die Option upsert auf true gesetzt ist. Sie können die Dokumente mit einem Abfrage-Selektor suchen und im Aktualisierungsobjekt die Operatoren "$set" und "$setOnInsert" verwenden.

"$setOnInsert" kann verwendet werden, um Felder in einer benutzerdefinierten Logik hinzuzufügen, die nur angewendet werden, wenn das Dokument hochgestuft und nicht aktualisiert wird.

db.collection.update(query, update, {upsert: true})

`db.products.update(
{ name: 'Apple' }, 
    { 
    $set: { item: "apple" }, 
    $setOnInsert: { defaultQty: 100 } 
    }, 
    { upsert: true } 
)` 

Siehe hier für mehr: MongoDB $setOnInsert

Sie haben Ihre Anfrage Selektor sorgfältig zu wählen, weil, wenn Sie nicht alle Felder in Abfrage Selektor liefern, wird es irgend des Dokuments übereinstimmen und wird dieses bestimmte Dokument aktualisieren. Also, besser einige solide Abfrage Selektor verwenden und nicht _id in der Abfrage-Selektor wie pro Ihre Anforderung und lassen Sie die Upsert automatisch _id erstellen (OR gesetzt _id „$ setOnInsert“ verwenden)

Hoffnung, das hilft.

+0

Leider hatte ich _id als Referenz. Ich möchte es nicht ändern. Also konnte ich nicht auf Workout Bezug nehmen. Danke für deine Zeit und dein Update. –

Verwandte Themen