2016-09-09 5 views
5

मैं चाहता हूं कि एक डायनेमोडीबी आइटम में अनिवार्य रूप से एक कैप्ड सूची क्या है। मैं सूची के सामने किसी आइटम को प्रीपेड करने में सक्षम होना चाहता हूं, और फिर आइटम को पीछे से छोड़ दें यदि यह किसी निश्चित आकार से अधिक हो।एकल डायनेमो डीबी अपडेट ऑपरेशन में सूची को जोड़ और छंटनी करें?

मेरे उदाहरण में मैं 3 करने के लिए टोपी, आगे जोड़ते तत्व "6" सेट करते हैं और दिखाने से पहले/के बाद कहता है:

    { } -> { "myList": [6] } 
     { "myList": [1] } -> { "myList": [6, 1] } 
{ "myList": [3, 2, 1] } -> { "myList": [6, 3, 2] } 

लेकिन मैं निम्नलिखित अद्यतन अभिव्यक्ति एक गठबंधन करने के लिए उपयोग नहीं कर सकते myList पर SET और REMOVE आपरेशन:

# (":empty" set to an empty list in the value map) 
SET myList = list_append(:v, if_not_exists(myList, :empty)) REMOVE myList[3] 

(जावा में दस्तावेज एपीआई का उपयोग) एक अपवाद में इस अभिव्यक्ति के परिणाम का उपयोग करने का प्रयास:

Invalid UpdateExpression: Two document paths overlap with each other; must remove or rewrite one of these paths 

अगर मैं दो अलग-अलग अपडेट अनुरोधों में SET और REMOVE विभाजित यह काम करेंगे। क्या कोई चाल है जो मुझे इसे एक ही अनुरोध में करने देगी?

उत्तर

4

वर्तमान में डायनेमो डीबी में, आपके पास एक से अधिक ऑपरेशन में एक ही दस्तावेज़ पथ नहीं हो सकता है, भले ही वे अलग-अलग ऑपरेशन हों। ऐसा इसलिए है क्योंकि डायनेमोडीबी एक ही अद्यतन अभिव्यक्ति में ऑपरेशन निष्पादन के आदेश की गारंटी नहीं दे सकता है।

+0

हाँ, मुझे आश्चर्य नहीं है कि इसे सीधे एक ही ऑपरेशन में नहीं किया जा सकता है। मैं उम्मीद कर रहा था कि वहां कुछ चाल या काम हो सकता है जो इसे पूरा करेगा। (दो अलग-अलग अनुरोध करने से दौड़ की स्थिति के लिए दरवाजा खुलता है, साथ ही यदि आप समवर्ती अपडेट कर रहे हैं, हालांकि सौभाग्य से यह मेरे उपयोग के मामले में कोई समस्या नहीं है ...) – ryryguy

+0

हाँ। यदि आप संख्याओं से निपट रहे हैं तो ज्यादातर मामलों में आप सशर्त अभिव्यक्तियों, रीट्रीज़, और परमाणु जोड़ और घटाने के संचालन के साथ दौड़ की स्थितियों को रोक सकते हैं। –

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