2014-10-21 5 views
10

मैं "दस्तावेज़" नामक JSON विशेषता में कुंजी-मान जोड़े जोड़ने/ओवरराइट करने के लिए नए Amazon DynamoDB JSON API का उपयोग करने का प्रयास कर रहा हूं। आदर्श रूप से, मैं विशेषता में जोड़ने के लिए केवी जोड़े को भेजने के लिए बस अपनी लेखन कॉलों को ढूढ़ना चाहता हूं, और डायनेमो विशेषता बनाते हैं यदि यह पहले से दी गई प्राथमिक कुंजी के लिए पहले से मौजूद नहीं है। लेकिन अगर मैं सिर्फ एक सीधा UpdateItemSpec के साथ इस प्रयास करें:डायनेमोडीबी एपीआई: मैं "अनुरोध नहीं होने पर JSON विशेषता जोड़ें" अद्यतन अनुरोध कैसे बना सकता हूं?

PrimaryKey primaryKey = new PrimaryKey("key_str", "mapKey"); 
ValueMap valuesMap = new ValueMap().withLong(":a", 1234L).withLong(":b", 1234L); 
UpdateItemSpec updateSpec = new UpdateItemSpec().withPrimaryKey(primaryKey).withUpdateExpression("SET document.value1 = :a, document.value2 = :b"); 
updateSpec.withValueMap(valuesMap); 
table.updateItem(updateSpec); 

मैं com.amazonaws.AmazonServiceException: The document path provided in the update expression is invalid for update मिलता है, DynamoDB जिसका अर्थ है "दस्तावेज़" का नाम दिया विशेषता है जो अद्यतन को लागू करने के लिए नहीं मिल सका।

मैं कॉल की आगामी श्रृंखला के साथ इस कार्यक्षमता के आस पास प्रबंधित:

try { 
    // 1. Attempt UpdateItemSpec as if attribute already exists 
} catch (AmazonServiceException e) { 
    // 2. Confirm the exception indicated the attribute was not present, otherwise rethrow it 
    // 3. Use a put-if-absent request to initialize an empty JSON map at the attribute "document" 
    // 4. Rerun the UpdateItemSpec call from the above try block 
}  

यह काम करता है, लेकिन आदर्श की तुलना में कम है, क्योंकि यह हर बार जब मैं करने के लिए एक नया प्राथमिक कुंजी जोड़ने DynamoDB करने के लिए 3 कॉल की आवश्यकता होगी तालिका। मैंने attribute_not_exists फ़ंक्शन के साथ थोड़ा सा प्रयोग किया जिसका उपयोग Update Expressions में किया जा सकता है, लेकिन जिस तरह से मैं चाहता हूं उसे काम करने में सक्षम नहीं था।

किसी भी डायनेमो गुरु के बारे में कोई विचार है कि यह कैसे किया जा सकता है या नहीं?

उत्तर

4

मुझे अमेज़ॅन समर्थन से एक उत्तर मिला कि वास्तव में इसे एक कॉल के साथ पूरा करना संभव नहीं है। उन्होंने खाली नक्शा की बजाय पुट-ए-अनुपस्थित अनुरोध में वांछित JSON मानचित्र का उपयोग करके, 3 से 2 तक नई प्राथमिक कुंजी के लिए विशेषता जोड़ते समय कॉल की संख्या को कम करने का सुझाव दिया था।

+3

मुझे वास्तव में कोड को देखना अच्छा लगेगा क्योंकि मुझे एक ही चुनौती का सामना करना पड़ रहा है। डायनेमोडीबी एपीआई मुझे चरम पर बेवकूफ़ बना देता है। –

+1

कोई विचार अगर यह उत्तर अभी भी लागू है? (उम्मीद है कि उन्होंने 2014 से कुछ बदल दिया है) – Nadine

संबंधित मुद्दे