Atualizando um documento
Para atualizar um documento, envie uma solicitação do tipo PUT ou POST com o conteúdo JSON atualizado e o valor mais recente de _rev para https://$ACCOUNT.cloudant.com/$DATABASE/$DOCUMENT_ID.
Também é possível usar esse método PUT para criar um documento, em cujo caso não é necessário fornecer o valor _rev mais recente.
Lembre-se de que para um banco de dados particionado, o $DOCUMENT_ID é formado por uma parte de chave de partição e uma parte de chave de documento.
Se você não fornecer o _rev mais recente ao tentar atualizar um documento existente, o IBM Cloudant retornará um erro 409.
Esse erro evita que você sobrescreva dados que foram alterados por outros processos. Se o quorum de gravação não puder ser atingido, uma resposta 202 será retornada.
Qualquer atualização de documento poderá levar a um conflito, especialmente quando você replicar documentos atualizados. Para obter mais informações sobre como evitar e resolver conflitos, consulte o guia Guia de versão de documento e MVCC.
É possível customizar este tópico para a linguagem de programação que deseja utilizar, selecionando a linguagem nos exemplos de código.
Veja um exemplo de atualização de um documento usando HTTP:
POST /$DATABASE HTTP/1.1
Veja exemplos de atualização de um 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))
O exemplo do Go anterior requer o bloco de importação a seguir:
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
"github.com/IBM/go-sdk-core/v5/core"
)
Todos os exemplos do Go requerem que o objeto service seja inicializado. Para obter mais informações, consulte a seção Autenticação da documentação da API para exemplos.
Veja um exemplo de dados JSON que contém um documento atualizado:
{
"id": "exampleid",
"ok": true,
"rev": "2-056f5f44046ecafc08a2bc2b9c229e20"
}
Lembre-se de que para um banco de dados particionado, o $DOCUMENT_ID é formado por uma parte de chave de partição e uma parte de chave de documento.
A resposta conterá o ID e a nova revisão do documento ou uma mensagem de erro se a atualização tiver falhado.
Veja uma resposta de exemplo após uma atualização bem-sucedida:
{
"id": "exampleid",
"ok": true,
"rev": "2-056f5f44046ecafc08a2bc2b9c229e20"
}