मैं केवल उपयोगकर्ता तालिका में सम्मिलित करना चाहता हूं यदि उपयोगकर्ता आईडी, ईमेल और उपयोगकर्ता नाम मौजूद नहीं है (यह अद्वितीय होना चाहते हैं)।
उपयोगकर्ता आईडी प्राथमिक कुंजी है (हैश कुंजी, डेटा प्रकार - संख्या)।
उपयोगकर्ता नाम और ईमेल गैर-महत्वपूर्ण विशेषताएं (दोनों स्ट्रिंग) हैं।कंडीशनएक्सप्रेस का उपयोग करके डायनेमोड में गैर-कुंजी विशेषता पहले से मौजूद है या नहीं?
यहाँ मैं कैसे की कोशिश की है:
response = userTable.put_item(
Item={
'userId': userIdNext,
'accType': 0,
'username': usernameInput,
'pwd': hashedPwd,
'email': emailInput
},
ConditionExpression = "(attribute_not_exists(userIdNext)) AND (NOT (contains (email, :v_email))) AND (NOT (contains(username, :v_username)))",
ExpressionAttributeValues={
":v_email": emailInput,
":v_username": usernameInput
}
)
मैं यहाँ से तार्किक ऑपरेटरों और हालत अभिव्यक्ति के लिए एडब्ल्यूएस दस्तावेज़ का पालन करने की कोशिश की: AWS Conditional Expressions
लेकिन यह तालिका में हर डालने है, भले ही उपयोगकर्ता नाम या ईमेल डीबी में पहले से मौजूद है।
(मैं नया userIdNext यह प्राथमिक कुंजी के रूप में और एक नकली नहीं हो सकता दे रहा हूँ) मैं अजगर implemetation उपयोग कर रहा हूँ boto3
मैं उपयोगकर्ता नाम या ईमेल पहले से मौजूद है, तो जाँच करने के लिए वैश्विक माध्यमिक इंडेक्स है, लेकिन इसकी नहीं की डुप्लिकेट प्रविष्टियां है परमाणु। तो यदि 2 उपयोगकर्ता एक ही समय में पूछते हैं और वह ईमेल 1 उपलब्ध है, तो वे दोनों उपयोगकर्ता तालिका में डालते हैं। और यदि सत्यापित करने के लिए कोई जांच नहीं है कि ईमेल/उपयोगकर्ता नाम पहले से मौजूद नहीं है, तो हमारे पास ईमेल/उपयोगकर्ता नाम के लिए डुप्लिकेट प्रविष्टियां हैं – kishorer747
मैंने जवाब संपादित किया। इस मामले में आपको एप्लिकेशन लॉक (उदाहरण के लिए memcache) –
हाँ का उपयोग करना चाहिए, मेरे पास एक अलग तालिका है जो उपयोगकर्ता नाम और ईमेल दोनों के लिए विशिष्टता की जांच करती है। लेकिन ऐसे मामलों में जब 2 उपयोगकर्ता एक ही समय में पंजीकरण करने का प्रयास करते हैं एक ही ईमेल/उपयोगकर्ता नाम, यह भी वाईआई डालने जा रहा है वांछित वें। धन्यवाद। मैं ताले में देखता हूँ। – kishorer747