10

मैं फ्लास्क-मोंगोएन्गिन का उपयोग करके एकत्रीकरण क्वेरी बनाने की कोशिश कर रहा हूं, और जो मैंने पढ़ा है उससे ऐसा लगता है कि यह संभव नहीं है।फ्लास्क-मोंगोइंजिन और पायमोंगो एकत्रीकरण क्वेरी

मैंने कई फ़ोरम थ्रेड, ई-मेल चेन और स्टैक ओवरफ़्लो पर कुछ प्रश्नों को देखा है, लेकिन मुझे फ्लास्क-मॉन्गेंगिन के साथ एकत्रीकरण को कार्यान्वित करने का वास्तव में अच्छा उदाहरण नहीं मिला है।

this question में एक टिप्पणी है जो कहती है कि आपको "कच्ची पिमोंगो और एकत्रीकरण कार्यक्षमता" का उपयोग करना है। हालांकि, इस बात का कोई उदाहरण नहीं है कि यह कैसे काम कर सकता है। मैंने पाइथन के साथ tinkered है और फ्लास्क ढांचे का उपयोग कर एक बुनियादी अनुप्रयोग है, लेकिन पूर्ण आवेदन में & मोंगो से कनेक्ट/पूछताछ मेरे लिए काफी नया है।

क्या कोई मेरे फ्लास्क-मॉन्गेंगिन मॉडल का उपयोग कैसे कर सकता है, लेकिन मैं Pymongo के साथ समेकन ढांचे का उपयोग कर क्वेरी का उदाहरण (या उदाहरण के लिए लिंक) प्रदान कर सकता हूं? क्या इसे मोंगोडीबी के लिए दो कनेक्शन की आवश्यकता होगी (एक प्यमोंगो के लिए एकत्रीकरण क्वेरी करने के लिए, और नियमित प्रश्न/डालने/मोंगोइंजिन के माध्यम से अद्यतन करने के लिए दूसरा)?

एकत्रीकरण क्वेरी का एक उदाहरण मैं प्रदर्शन करने के लिए इस प्रकार है चाहते हैं (इस क्वेरी मुझे बिल्कुल हो जाता है जानकारी मैं मोंगो खोल में चाहते हैं):

db.entry.aggregate([ 
    { '$group' : 
     { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 
      'count' : { '$sum' : 1 } 
     } 
    } 
]) 

इस क्वेरी से उत्पादन का एक उदाहरण:

{ "_id" : { "carrier" : "Carrier 1", "category" : "XYZ" }, "count" : 2 } 
{ "_id" : { "carrier" : "Carrier 1", "category" : "ABC" }, "count" : 4 } 
{ "_id" : { "carrier" : "Carrier 2", "category" : "XYZ" }, "count" : 31 } 
{ "_id" : { "carrier" : "Carrier 2", "category" : "ABC" }, "count" : 6 } 

उत्तर

13

वर्ग अपने वास्तव में Mongoengine साथ परिभाषित एक _get_collection() विधि है जो "कच्चे" संग्रह वस्तु pymongo ड्राइवर में लागू किया जाता है।

मैं सिर्फ अपने वास्तविक वर्ग इस उदाहरण में कनेक्शन के लिए परिभाषित के लिए एक प्लेसहोल्डर के रूप में यहाँ नाम Model उपयोग कर रहा हूँ:

Model._get_collection().aggregate([ 
    { '$group' : 
     { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 
      'count' : { '$sum' : 1 } 
     } 
    } 
]) 

तो आप हमेशा एक अलग कनेक्शन की स्थापना के बिना pymongo वस्तुओं का उपयोग कर सकते हैं। Mongoengine खुद pymongo पर बना है।

+0

बहुत बढ़िया एकत्रीकरण ढांचे का उपयोग कर एक समग्र क्वेरी निष्पादित है! आपका बहुत बहुत धन्यवाद। समाधान खोजने की कोशिश करने के लिए यह एक सिरदर्द रहा है। मैंने "_get_collection()" विधि के साथ परीक्षण किया और मोंगो से आउटपुट प्राप्त करने में सक्षम था। – SirCobalt

+0

शानदार उत्तर !! बस इसमें जोड़ने के लिए, यदि आप केवल कुछ रिकॉर्ड पर समूह द्वारा समूह को चलाने के लिए चाहते हैं, तो आप निम्नानुसार $ मैच ऑपरेटर का उपयोग कर सकते हैं: 'Model._get_collection()। कुल ([ { '$ match' : qs._query, }, {'$ समूह': {'_id': {'वाहक': '$ वाहक ए', 'श्रेणी': '$ श्रेणी'}, 'गिनती': {'$ sum ': 1} } } ]) जहां qs MongoEngine क्वेरीसेट का एक उदाहरण है। – Yahya

9

aggregate Mongoengine 0.9 के बाद उपलब्ध है। API Reference से लिंक करें।

कोई उदाहरण जो भी चारों ओर है, इस तरीके से Mongoengine> 0.9

साथ
pipeline = [ 
    { '$group' : 
    { '_id' : { 'carrier' : '$carrierA', 'category' : '$category' }, 
     'count' : { '$sum' : 1 } 
    } 
    }] 

Model.objects().aggregate(*pipeline) 
+0

बहुत बढ़िया, धन्यवाद – Jivan

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