2017-03-05 1 views
0

En référence à blog Je suis capable de télécharger des documents en masse. Mon problème est que peu de documents existent déjà dans cloudant. L'approche suggérée échoue donc. S'il vous plaît suggérez comment manipuler l'addition en vrac si les documents n'existent pas dans la mise à jour si les documents existent.Quelle est la meilleure approche pour mettre à jour un document dans le cloud si disponible ou bien insérer le document à l'aide de Java cloudant API

+0

Vérifiez si un 'existe upsert' opertation qui crée un nouveau document dans le cas où il est l'absence ou les mises à jour autrement. Sinon, vous devrez d'abord interroger pour voir quels documents existent déjà et déclencher 2 opérations à la place; mettre à jour et créer. –

+0

Merci pour la réponse rapide .. Mais le "cloudant-client-2.6.2.jar" n'a pas d'opération "upsert". Ainsi, maintenant la seule option est 1. Tirez chaque document et vérifiez s'il existe. 2. Si introuvable, ajoutez-le. 3. Si trouvé, alors le mettre à jour. –

Répondre

0

Ci-dessous le code a fonctionné pour moi:

public void upsert(List<JsonObject> bulkData,String dbName) 
{ 
    if (bulkData == null) { 
     return; 
    } 

    if(bulkData.isEmpty()){ 
     return; 
    } 
    if(null==dbName || dbName.length() <1){ 
     return; 
    } 

    int totalDocumentsToSave = 0; 
    int totalDocumentToInsert = 0; 
    int totalDocumentToUpdate = 0; 
    int totalUpdatesFailed=0; 
    int totalInsertsFailed =0; 

    totalDocumentsToSave = bulkData.size(); 


    Database db = client.database(dbName, false); 

     try { 
      for (JsonObject aDoc : bulkData) { 
       if (aDoc.get("_id") != null) { 
        String _id= aDoc.get("_id").getAsString(); 

        if(db.contains(_id)) 
        { 
         try 
         { 
          Map<String, String> aDocOnCloudant = db.getAllDocsRequestBuilder() 
             .keys(_id) 
             .includeDocs(true) 
             .build() 
             .getResponse() 
             .getIdsAndRevs(); 

           String _revId = aDocOnCloudant.get(_id); 
           aDoc.addProperty("_rev", _revId); 
           db.update(aDoc); 
           totalDocumentToUpdate++; 
         } 
         catch(Exception e) 
         { 
          totalUpdatesFailed++; 
         } 

        } 
        else 
        { 
         try 
         { 
         db.save(aDoc); 
         totalDocumentsToSave++; 
         } 
         catch(Exception e) 
         { 
          totalInsertsFailed++; 
         } 
        } 
       } 
      } 

      db.ensureFullCommit(); 

} 
     catch(Exception e){ 

     } 

     String log = " .Number of Documents to Save: " + totalDocumentsToSave + 
        " .Number of Documents inserted: " + totalDocumentToInsert + 
        " .Number of Documents to Updated: " + totalDocumentToUpdate + 
        " .Failed Inserts: " + totalInsertsFailed + 
        " .Failed Updates: " + totalUpdatesFailed + 
        " .Cloudant full commit completed"; 
     System.out.println(log); 

}