Dokument aktualisieren

Um ein Dokument zu aktualisieren, senden Sie eine Anfrage vom Typ „ PUT “ oder „ POST “ mit dem aktualisierten JSON-Inhalt und dem neuesten Wert für „ _rev “ an https://$ACCOUNT.cloudant.com/$DATABASE/$DOCUMENT_ID. Mit dieser PUT-Methode können Sie auch ein Dokument erstellen (dabei muss der neueste Wert für _rev nicht angegeben werden).

Beachten Sie, dass das Feld $DOCUMENT_ID für eine partitionierte Datenbank einen Partitionsschlüssel und einen Dokumentschlüssel enthält.

Wenn Sie beim Versuch, ein bestehendes Dokument zu aktualisieren, nicht die aktuellste „ _rev “ angeben, gibt IBM Cloudant einen 409-Fehler zurück. Dieser Fehler verhindert, dass Sie Daten überschreiben, die von anderen Prozessen geändert wurden. Wenn das Schreibquorum nicht erreicht werden kann, wird eine Antwort 202 zurückgegeben.

Jede Dokumentaktualisierung kann einen Konflikt verursachen, insbesondere beim Replizieren aktualisierter Dokumente. Weitere Informationen zum Vermeiden und Beheben von Konflikten finden Sie in der Anleitung Dokumentversionssteuerung und MVCC.

Sie können dieses Thema für die zu verwendende Programmiersprache anpassen, indem Sie die Sprache in den Codebeispielen auswählen.

Sehen Sie sich ein Beispiel für die Aktualisierung eines Dokuments mithilfe von HTTP an:

POST /$DATABASE HTTP/1.1

Sehen Sie sich Beispiele für das Aktualisieren eines Dokuments an:

curl -H "Authorization: Bearer $API_BEARER_TOKEN" -X POST "$SERVICE_URL/products" -H "Content-Type: application/json" --data '{ "_id": "small-appliances:1000042", "_rev": "1-967a00dff5e02add41819138abb3284d", "type": "product", "productid": "1000042", "brand": "Salter", "name": "Digital Kitchen Scales", "description": "Slim Colourful Design Electronic Cooking Appliance for Home / Kitchen, Weigh up to 5kg + Aquatronic for Liquids ml + fl. oz. 15Yr Guarantee - Green", "price: 14.99, "image": "assets/img/0gmsnghhew.jpg" }'
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.Document;
import com.ibm.cloud.cloudant.v1.model.DocumentResult;
import com.ibm.cloud.cloudant.v1.model.PostDocumentOptions;
Cloudant service = Cloudant.newInstance();
Document productsDocument = new Document();
productsDocument.setId("small-appliances:1000042");
productsDocument.setRev("1-967a00dff5e02add41819138abb3284d");
productsDocument.put("type", "product");
productsDocument.put("productid", "1000042");
productsDocument.put("brand", "Salter");
productsDocument.put("name", "Digital Kitchen Scales");
productsDocument.put("description", "Slim Colourful Design Electronic"
    + "Cooking Appliance for Home/Kitchen, Weigh up to 5kg + Aquatronic"
    + "for Liquids ml + fl. oz. 15Yr Guarantee - Green");
productsDocument.put("price", 14.99);
productsDocument.put("image", "assets/img/0gmsnghhew.jpg");
PostDocumentOptions documentOptions =
    new PostDocumentOptions.Builder()
        .db("products")
        .document(productsDocument)
        .build();
DocumentResult response =
    service.postDocument(documentOptions).execute()
        .getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
const productsDoc = {
  _id: 'small-appliances:1000042',
  _rev: '1-967a00dff5e02add41819138abb3284d'
  type: 'product',
  productid: '1000042',
  brand: 'Salter',
  name: 'Digital Kitchen Scales',
  description: 'Slim Colourful Design Electronic Cooking Appliance for Home / Kitchen, Weigh up to 5kg + Aquatronic for Liquids ml + fl. oz. 15Yr Guarantee - Green',
  price: 14.99,
  image: 'assets/img/0gmsnghhew.jpg'
};
service.postDocument({
  db: 'products',
  document: productsDoc
}).then(response => {
  console.log(response.result);
});
from ibmcloudant.cloudant_v1 import Document, CloudantV1
service = CloudantV1.new_instance()
products_doc = Document(
  id="small-appliances:1000042",
  rev="1-967a00dff5e02add41819138abb3284d"
  type="product",
  productid="1000042",
  brand="Salter",
  name="Digital Kitchen Scales",
  description="Slim Colourful Design Electronic Cooking Appliance for Home / Kitchen, Weigh up to 5kg + Aquatronic for Liquids ml + fl. oz. 15Yr Guarantee - Green",
  price=14.99,
  image="assets/img/0gmsnghhew.jpg")
response = service.post_document(db='products', document=products_doc).get_result()
print(response)
productsDoc := cloudantv1.Document{
  ID: core.StringPtr("small-appliances:1000042"),
}
productsDoc.Rev = "1-967a00dff5e02add41819138abb3284d"
productsDoc.SetProperty("type", "product")
productsDoc.SetProperty("productid", "1000042")
productsDoc.SetProperty("brand", "Salter")
productsDoc.SetProperty("name", "Digital Kitchen Scales")
productsDoc.SetProperty("description", "Slim Colourful Design Electronic Cooking Appliance for Home / Kitchen, Weigh up to 5kg + Aquatronic for Liquids ml + fl. oz. 15Yr Guarantee - Green")
productsDoc.SetProperty("price", 14.99)
productsDoc.SetProperty("image", "assets/img/0gmsnghhew.jpg")
postDocumentOptions := service.NewPostDocumentOptions(
  "products",
)
postDocumentOptions.SetDocument(&productsDoc)
documentResult, response, err := service.PostDocument(postDocumentOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(documentResult, "", "  ")
fmt.Println(string(b))

Das vorherige Go-Beispiel erfordert den folgenden Importblock:

import (
   "encoding/json"
   "fmt"
   "github.com/IBM/cloudant-go-sdk/cloudantv1"
   "github.com/IBM/go-sdk-core/v5/core"
)

Für alle Go-Beispiele muss das Objekt service initialisiert sein. Weitere Informationen finden Sie in den Beispielen im Abschnitt 'Authentifizierung' in der API-Dokumentation.

Das folgende Beispiel zeigt JSON-Daten, die ein aktualisiertes Dokument enthalten:

{
   "id": "exampleid",
   "ok": true,
   "rev": "2-056f5f44046ecafc08a2bc2b9c229e20"
}

Beachten Sie, dass das Feld $DOCUMENT_ID für eine partitionierte Datenbank einen Partitionsschlüssel und einen Dokumentschlüssel enthält.

Die Antwort enthält die ID und die neue Revision des Dokuments oder eine Fehlernachricht, wenn die Aktualisierung fehlgeschlagen ist.

Beispielantwort nach einer erfolgreichen Aktualisierung:

{
  "id": "exampleid",
  "ok": true,
  "rev": "2-056f5f44046ecafc08a2bc2b9c229e20"
}