क्या मोनो डीबी में परमाणु ऑपरेशन के साथ एक दस्तावेज़ के बुलियन फ़ील्ड को टॉगल करने का कोई तरीका है? कहें, (पायथन में)परमाणु संचालन के साथ एक दस्तावेज़ में एक बूलियन फ़ील्ड को टॉगल कैसे करें?
cl.update({"_id": ...}, {"$toggle": {"field": 1}})
क्या मोनो डीबी में परमाणु ऑपरेशन के साथ एक दस्तावेज़ के बुलियन फ़ील्ड को टॉगल करने का कोई तरीका है? कहें, (पायथन में)परमाणु संचालन के साथ एक दस्तावेज़ में एक बूलियन फ़ील्ड को टॉगल कैसे करें?
cl.update({"_id": ...}, {"$toggle": {"field": 1}})
अभी, मुझे नहीं लगता कि यह एक ऑपरेशन के साथ ऐसा करना संभव है। 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 ];
अच्छा समाधान, #mongodb में समान प्रस्तावित;) उस बातचीत के परिणामस्वरूप टिकट https://jira.mongodb.org/browse/SERVER-4362 –
SERVER-4362 मुद्दा वास्तव में अब हल हो गई है का उपयोग करें और आप $bit
अद्यतन ऑपरेटर उपलब्ध है। तो साथ साथ यह xor
तर्क है कि तुम अब एक परमाणु कार्रवाई में यह कर सकते हैं:
cl.findOneAndUpdate(
{ "_id": ...},
{
"$bit": {
"field": { "xor": NumberInt(1) }
}
},
{ "returnNewDocument": true, "upsert": true }
);
तो जब तक फ़ील्ड का मान 0
पर रखा जाता है या 1
तो एक बिटवाइज़ "फ्लिप" परिणाम होगा कि वर्तमान मूल्य बनाता है संशोधन के समय क्या था इसके विपरीत।
.findOneAndUpdate()
आवश्यक नहीं है, लेकिन यह दर्शाता है कि परिणामी मूल्य प्रत्येक संशोधन पर अलग है।
क्या पूर्णांक के बजाय बूलियन मानों के लिए इसका उपयोग करने का कोई तरीका है? – mlovic
पृथक दस्तावेज़ पर संचालन परमाणु हैं, लेकिन दस्तावेजों के सेट पर संचालन परमाणु नहीं हैं। क्या आपका मतलब है कि संग्रह के सभी दस्तावेजों के लिए आपको ध्वज बदलने की जरूरत है? – Oleg
क्षमा करें मैंने यह स्पष्ट नहीं किया है। मैं अलग दस्तावेज़ पर संचालन करना चाहता हूं। – halfjuice