2012-02-27 10 views
13

क्या मोनो डीबी में परमाणु ऑपरेशन के साथ एक दस्तावेज़ के बुलियन फ़ील्ड को टॉगल करने का कोई तरीका है? कहें, (पायथन में)परमाणु संचालन के साथ एक दस्तावेज़ में एक बूलियन फ़ील्ड को टॉगल कैसे करें?

cl.update({"_id": ...}, {"$toggle": {"field": 1}}) 
+0

पृथक दस्तावेज़ पर संचालन परमाणु हैं, लेकिन दस्तावेजों के सेट पर संचालन परमाणु नहीं हैं। क्या आपका मतलब है कि संग्रह के सभी दस्तावेजों के लिए आपको ध्वज बदलने की जरूरत है? – Oleg

+0

क्षमा करें मैंने यह स्पष्ट नहीं किया है। मैं अलग दस्तावेज़ पर संचालन करना चाहता हूं। – halfjuice

उत्तर

15

अभी, मुझे नहीं लगता कि यह एक ऑपरेशन के साथ ऐसा करना संभव है। Bitwise ऑपरेटरों (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) के पास अभी तक '$ xor' नहीं है हालांकि मेरे पास इसके लिए पैच है।

अभी वैकल्पिक हल मुझे लगता है कि के थिंक हमेशा '$ इंक' का उपयोग करना है: तो फिर

cl.update({ "_id": ...}, { '$inc' : { 'field' : 1 } });

बजाय सही या गलत के लिए जाँच, आप जांच कर सकते हैं कि क्या एक आइटम होता है "सही":

cl.find({ "_id": ..., 'field' : { '$mod' : [ 2, 1 ] });

आईई, आप मॉड्यूल ऑपरेटर का उपयोग यह देखने के लिए करते हैं कि यह "अनसेट" होने के बावजूद भी असमान है या असमान "सेट" है। आप oppposite व्यवहार (यानी, सभी आइटम है कि झंडा सेट नहीं है लगता है) के लिए चाहते हैं, तो

[ 2, 0 ];

+0

अच्छा समाधान, #mongodb में समान प्रस्तावित;) उस बातचीत के परिणामस्वरूप टिकट https://jira.mongodb.org/browse/SERVER-4362 –

4

SERVER-4362 मुद्दा वास्तव में अब हल हो गई है का उपयोग करें और आप $bit अद्यतन ऑपरेटर उपलब्ध है। तो साथ साथ यह xor तर्क है कि तुम अब एक परमाणु कार्रवाई में यह कर सकते हैं:

cl.findOneAndUpdate( 
    { "_id": ...}, 
    { 
    "$bit": { 
     "field": { "xor": NumberInt(1) } 
    } 
    }, 
    { "returnNewDocument": true, "upsert": true } 
); 

तो जब तक फ़ील्ड का मान 0 पर रखा जाता है या 1 तो एक बिटवाइज़ "फ्लिप" परिणाम होगा कि वर्तमान मूल्य बनाता है संशोधन के समय क्या था इसके विपरीत।

.findOneAndUpdate() आवश्यक नहीं है, लेकिन यह दर्शाता है कि परिणामी मूल्य प्रत्येक संशोधन पर अलग है।

+4

क्या पूर्णांक के बजाय बूलियन मानों के लिए इसका उपयोग करने का कोई तरीका है? – mlovic

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