Thursday, 2 December 2021

Spring data: ArangoTemplate: Update a document

Spring Data ArangoOperations interface provides update method to update the document.

<T> DocumentEntity update(Object id, T value, DocumentUpdateOptions options) throws DataAccessException;
<T> DocumentEntity update(Object id, T value) throws DataAccessException;

 

Partially updates the document identified by document id or key. All attributes from the patch document will be added to the existing document if they do not yet exist, and overwritten in the existing document if they do exist there.

 

'DocumentUpdateOptions' is used to add additional options while updating the document. Below table summarizes different properties of DocumentUpdateOptions object.

 

Property

Datatype

Description

keepNull

Boolean

If keepNull is set to false, then this will modify the behaviour of the patch command to remove any attributes from the existing document that are contained in the patch document with an attribute value of null.

mergeObjects

Boolean

Controls whether objects (not arrays) will be merged if present in both the existing and the patch document. If set to false, the value in the patch document will overwrite the existing document's value. If set to true, objects will be merged. The default is true.

waitForSync

Boolean

Wait until document has been synced to disk.

ignoreRevs

Boolean

By default, or if this is set to true, the _rev attributes in the given document is ignored. If this is set to false, then the _rev attribute given in the body document is taken as a precondition. The document is only updated if the current revision is the one specified.

ifMatch

String

ifMatch update a document based on target revision

returnNew

Boolean

Return additionally the complete new document under the attribute new in the result.

returnOld

Boolean

Return additionally the complete previous revision of the changed document under the attribute old in the result.

serializeNull

Boolean

By default, or if this is set to true, all fields of the document which have null values are serialized to VelocyPack otherwise they are excluded from serialization. Use this to update single fields from a stored document.

silent

Boolean

If set to true, an empty object will be returned as response. No meta-data will be returned for the created document. This option can be used to save some network traffic.

streamTransactionId

String

If set, the operation will be executed within the transaction.

 

Example

 

Map<String, Object> newEmpDoc = new HashMap();
newEmpDoc.put("firstName", "Jaideep");
newEmpDoc.put("age", 35);

DocumentUpdateOptions docUpdateOptions = new DocumentUpdateOptions();
docUpdateOptions.returnNew(true);

DocumentUpdateEntity documentUpdateEntity = (DocumentUpdateEntity) arangoTemplate.update(documentCreateEntity.getId(), newEmpDoc, docUpdateOptions);

 

Follow below step-by-step procedure to build complete working application.

 

Step 1: Create new maven project ‘arango-template-update-document’.

 

Step 2: Update pom.xml with maven dependencies.

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sample.app</groupId>
    <artifactId>arango-template-update-document</artifactId>
    <version>1</version>

    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
    </parent>


    <dependencies>
        <dependency>
            <groupId>com.arangodb</groupId>
            <artifactId>arangodb-spring-boot-starter</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

Step 3: Define arango db configuration class.

 

ArangoConfig.java

package com.sample.app.config;

import org.springframework.context.annotation.Configuration;

import com.arangodb.ArangoDB;
import com.arangodb.springframework.annotation.EnableArangoRepositories;
import com.arangodb.springframework.config.ArangoConfiguration;

@Configuration
@EnableArangoRepositories(basePackages = { "com.sample.app" })
public class ArangoConfig implements ArangoConfiguration {

    @Override
    public ArangoDB.Builder arango() {
        return new ArangoDB.Builder().host("localhost", 8529).user("root").password("tiger");
    }

    @Override
    public String database() {
        return "abc_org";
    }
}

Step 4: Define main application class.

 

App.java

package com.sample.app;

import java.util.*;
import java.util.Collection;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import com.arangodb.entity.DocumentCreateEntity;
import com.arangodb.entity.DocumentUpdateEntity;
import com.arangodb.entity.MultiDocumentEntity;
import com.arangodb.model.DocumentCreateOptions;
import com.arangodb.model.DocumentUpdateOptions;
import com.arangodb.springframework.core.ArangoOperations;

@SpringBootApplication
public class App {

    @Autowired
    private ArangoOperations arangoTemplate;

    public static void main(String args[]) {
        SpringApplication.run(App.class, args);
    }

    @Bean
    public CommandLineRunner demo() {

        return (args) -> {
            Map<String, Object> empDoc1 = new HashMap();
            empDoc1.put("firstName", "Shanmukha Rao");
            empDoc1.put("lastName", "Kummari");
            empDoc1.put("id", 1);

            DocumentCreateOptions docCreateOptions = new DocumentCreateOptions();
            docCreateOptions.returnNew(true);

            DocumentCreateEntity documentCreateEntity = (DocumentCreateEntity) arangoTemplate.insert(empDoc1,
                    docCreateOptions);

            System.out.println("\nid : " + documentCreateEntity.getId());
            System.out.println("key : " + documentCreateEntity.getKey());
            System.out.println("revision : " + documentCreateEntity.getRev());
            System.out.println("doc : " + documentCreateEntity.getNew());

            // update firstName and add new age property
            Map<String, Object> newEmpDoc = new HashMap();
            newEmpDoc.put("firstName", "Jaideep");
            newEmpDoc.put("age", 35);

DocumentUpdateOptions docUpdateOptions = new DocumentUpdateOptions(); docUpdateOptions.returnNew(true); DocumentUpdateEntity documentUpdateEntity = (DocumentUpdateEntity) arangoTemplate .update(documentCreateEntity.getId(), newEmpDoc, docUpdateOptions); System.out.println("\nage attribute is added and firstName is updated in the document\n"); System.out.println("\nid : " + documentUpdateEntity.getId()); System.out.println("key : " + documentUpdateEntity.getKey()); System.out.println("revision : " + documentUpdateEntity.getRev()); System.out.println("doc : " + documentUpdateEntity.getNew()); }; } }

Total project structure looks like below.


 

 

 

Run App.java, you will see below messages in console.

 

id : hashMap/35151
key : 35151
revision : _cUkx71u---
doc : {"_key":"35151","_id":"hashMap\/35151","_rev":"_cUkx71u---","firstName":"Shanmukha Rao","lastName":"Kummari","id":1}

age attribute is added and firstName is updated in the document


id : hashMap/35151
key : 35151
revision : _cUkx73O---
doc : {"_key":"35151","_id":"hashMap\/35151","_rev":"_cUkx73O---","firstName":"Jaideep","lastName":"Kummari","id":1,"age":35}

You can download complete working application from below link.

https://github.com/harikrishna553/springboot/tree/master/arangodb/arango-template-update-document



Previous                                                    Next                                                    Home

No comments:

Post a Comment