2017-07-07 1 views
2

Ich versuche, neue Felder zu einem Dokument hinzuzufügen, das ich in Cloudant basierend auf Benutzereingaben habe. Wenn ich eine Einfügung mache, überschreibe ich das Dokument und verliere vorhandene Felder , es sei denn, ich sende sie mit der insert.So fügen Sie neue Felder zum Dokument in Cloudant hinzu, ohne bestehende zu verlieren

Zum Beispiel habe ich einen Befehl, der eine Abfrage an Cloudant führt, um ein Dokument zu erhalten, und gibt mir die _id, _rev, name and special_id Felder zurück. Dieses Dokument wird an einen neuen Befehl übergeben, der ein Feld, z. B. favorite_food, durch eine Einfügung anfügt (und ja, ich verwende _rev).

Nun gibt der Benutzer einen anderen Befehl ein, wie "Schule hinzufügen". Der Prozess beginnt von vorne, ich frage Cloudant ab und die Abfrage, die ich habe, gibt mir die _id, _rev, name, and special_id zurück. Ich füge ein school Feld an das Dokument an, mache eine insert, aber dann überprüfe ich das Dokument und favorite_food ist weg.

Gibt es einen Parameter, den ich an die Cloudant insert Funktion übergeben kann, um sie zu informieren, dass sie tatsächlich ein Update durchführt und nicht überschreibt?

FYI das läuft auf Node und mit dem node-cloudant Paket. In der Dokumentation kann ich keine weiteren Details über params finden, und ein typischer Einsatz wie folgt aussieht:

cloudantDb.insert(doc, params, function(error, response) { 
    if (!error) { 
    console.log("success", response); 
    resolve(response); 
    } else { 
    console.log("error", error); 
    reject(error); 
    } 
}); 

Antwort

1

ohne den Code zu sehen, es ist schwer, sicher zu sagen. Es gibt keinen magischen Parameter. In Cloudant gibt es keinen Unterschied zwischen erstellen, aktualisieren und löschen - alle erstellen im Wesentlichen eine Revision. Sie können das JSON-Dokument nicht "patchen", Sie müssen das Ganze jedes Mal bereitstellen. Hier ein Beispiel:

# Create a new document 
curl -XPOST -H 'content-type:application/json' \ 
    'https://skruger.cloudant.com/testdb' -d '{"name":"stefan"}' 
{"ok":true,"id":"5309a1784a9cc45d498e8170af7dcc3c","rev":"1-a0f0b27e1069f45cc121dfe5dc08f280"} 

# Add a field 
curl -XPUT -H 'content-type:application/json' \ 
'https://skruger.cloudant.com/testdb/5309a1784a9cc45d498e8170af7dcc3c' \ 
    -d '{"_id":"5309a1784a9cc45d498e8170af7dcc3c", "_rev":"1-a0f0b27e1069f45cc121dfe5dc08f280", "name":"stefan", "fish":"pike pearch"}' 
{"ok":true,"id":"5309a1784a9cc45d498e8170af7dcc3c","rev":"2-7c3ea3603c3e16962c7b33f50becc771"} 

# Fetch it again 
curl 'https://skruger.cloudant.com/testdb/5309a1784a9cc45d498e8170af7dcc3c' 
{"_id":"5309a1784a9cc45d498e8170af7dcc3c","_rev":"2-7c3ea3603c3e16962c7b33f50becc771","name":"stefan","fish":"pike pearch"} 

# And another new field 
curl -XPUT -H 'content-type:application/json' \ 
'https://skruger.cloudant.com/testdb/5309a1784a9cc45d498e8170af7dcc3c' \ 
-d '{"_id":"5309a1784a9cc45d498e8170af7dcc3c", "_rev":"2-7c3ea3603c3e16962c7b33f50becc771", "name":"stefan", "fish":"pike pearch", "sport":"tennis"}' 
{"ok":true,"id":"5309a1784a9cc45d498e8170af7dcc3c","rev":"3-e0f4d1ab1a47b046ea90a0fbbf34ff36"} 

# Fetch again  
curl 'https://skruger.cloudant.com/testdb/5309a1784a9cc45d498e8170af7dcc3c' 
{"_id":"5309a1784a9cc45d498e8170af7dcc3c","_rev":"3-e0f4d1ab1a47b046ea90a0fbbf34ff36","name":"stefan","fish":"pike pearch","sport":"tennis"} 
Verwandte Themen