2011-09-30 12 views
5

मैं मोंगोडेन के साथ मोंगोएन्गिन का उपयोग कर रहा हूं। मुझे एक दस्तावेज़ बनाना है जिसमें tuple (merchant_id, order_id, event_type) एक अनूठी कुंजी होनी चाहिए।Mongoengine unique_with

अभी तक, मैंने हमेशा दो क्षेत्रों तक सीमित विशिष्टता के साथ निपटाया है। तो निम्नलिखित works-

merchant_id = StringField(required = True) 
order_id = StringField(required = True, unique_with = 'merchant_id') 

अब, मैं तीन क्षेत्रों के लिए यह करने के लिए कोशिश कर रहा हूँ -

merchant_id = StringField(required = True) 
order_id = StringField(required = True) 
event_type = StringField(
    required = True, 
    unique_with = ['merchant_id', 'order_id']) 

लेकिन यह काम नहीं करता। मुझे मॉड्यूल में कोई त्रुटि नहीं मिल रही है। लेकिन अगर मैं के रूप में डेटा दर्ज -

merchant_id = 'Merchant1' 
order_id = 'Order1' 
event_type = 'Event1' 

और फिर उसी merchant_id और order_id लेकिन एक अलग event_id के साथ एक और डेटा को जोड़ने का प्रयास है, तो यह एक नकली चाबी होने के बारे में एक त्रुटि देता है।

मैं भी कोशिश की है:

merchant_id = StringField(required = True) 
order_id = StringField(required = True) 
event_type = StringField(
    required = True, 
    unique_with = ('merchant_id', 'order_id')) 
+3

मुझे मिल गया क्या समस्या थी। ऐसा लगता है कि एक बार आपका संग्रह बनने के बाद, आप अद्वितीय कुंजी नहीं बदल सकते हैं। तो पहले विशिष्टता दो क्षेत्रों में थी और बाद में मैंने इसे तीन क्षेत्रों में बदल दिया। तो यह पहली कुंजी परिभाषित कर रहा था। प्रभाव लेने के लिए परिभाषित नवीनतम कुंजी के लिए, ड्रॉपकोलेक्शन() का उपयोग करके संग्रह को पूरी तरह से छोड़ना होगा। फिर यह काम करता है। – Siddharth

उत्तर

1

यदि आप किसी मौजूदा सूचकांक के मापदंडों को संशोधित करना चाहते हैं, तो आप पहले सूचकांक ड्रॉप करने और फिर इसे पुन: किया है। बेशक आप डुप्लीकेट वाले संग्रहों पर एक अद्वितीय अनुक्रमणिका नहीं बना सकते हैं। या तो आपको पहले डुप्लिकेट को हटाना होगा, या 'ड्रॉपडप्स' इंडेक्स निर्माण विकल्प का उपयोग करना होगा।

5

आप वर्ग के मेटा dict में indexes निर्दिष्ट कर सकते हैं

meta = { 
    'indexes': [ 
     {'fields': ('merchant_id', 'order_id'), 'unique': True} 
    ] 
} 
संबंधित मुद्दे