Aggiornamento di un documento

Per aggiornare un documento, inviare una richiesta PUT o POST con il contenuto JSON aggiornato e il valore più recente _rev a https://$ACCOUNT.cloudant.com/$DATABASE/$DOCUMENT_ID. È possibile utilizzare questo metodo PUT anche per creare un documento, in questo caso non è necessario fornire il valore più recente di _rev.

Ricordiamo che per un database partizionato il sito $DOCUMENT_ID è formato da una parte di chiave di partizione e da una parte di chiave di documento.

Se non si fornisce la versione più recente di _rev quando si cerca di aggiornare un documento esistente, IBM Cloudant risponde con un errore 409. Questo errore impedisce di sovrascrivere i dati modificati da altri processi. Se il quorum di scrittura non può essere raggiunto, viene restituita una risposta 202.

Qualsiasi aggiornamento di un documento può generare un conflitto, soprattutto quando si replicano i documenti aggiornati. Per ulteriori informazioni su come evitare e risolvere i conflitti, vedere la guida Document versioning and MVCC.

È possibile personalizzare questo argomento per il linguaggio di programmazione che si desidera utilizzare, selezionando il linguaggio negli esempi di codice.

Vedere un esempio di aggiornamento di un documento utilizzando HTTP:

POST /$DATABASE HTTP/1.1

Vedere esempi di aggiornamento di un documento:

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))

Il precedente esempio di Go richiede il seguente blocco di importazione:

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

Tutti gli esempi Go richiedono l'iniziazione dell'oggetto service. Per ulteriori informazioni, consultare la sezione Autenticazione della documentazione API per gli esempi.

Vedere un esempio di dati JSON che contengono un documento aggiornato:

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

Ricordiamo che per un database partizionato il sito $DOCUMENT_ID è formato da una parte di chiave di partizione e da una parte di chiave di documento.

La risposta contiene l'ID e la nuova revisione del documento, o un messaggio di errore se l'aggiornamento non è riuscito.

Vedere un esempio di risposta dopo un aggiornamento riuscito:

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