2013-02-28 5 views
15

में मेरे दस्तावेज़ फ्लास्क ऐप में मैं मोंगोइजिन का उपयोग कर रहा हूं। मैं अपने मोंगोडीबी में अपने स्थानों के संग्रह में कई दस्तावेज डालने की कोशिश कर रहा हूं।मोंगोडेगिन का उपयोग करके मोंगोडेंग

मेरे दस्तावेज़ वर्ग के रूप में

class places(db.Document): 

    name = db.StringField(max_length=200, required=True)  
    loc = db.GeoPointField(required=True) 

    def __unicode__(self): 
    return self.name 

    a=[] 
    a.append({"name" : 'test' , "loc":[-87,101]}) 
    a.append({"name" : 'test' , "loc":[-88,101]}) 
    x= places(a) 

परिभाषित किया गया है पिछले बयान

x= places(a) 
TypeError: __init__() takes exactly 1 argument (2 given) 

मैं अपने उदाहरण

places.insert(x) 
places.save(x) 

दोनों विफल इस को बचाने की कोशिश विफल रहता है। कृपया मदद करे।

उत्तर

21

Places.objects.insert शब्दकोशों यह Places उदाहरणों हो गया है की एक सूची नहीं लेता है। सामान्य कार्यों Places के व्यक्तिगत उदाहरणों बना सकते हैं और सहेज सकते हैं या जैसे डालने के लिए होगा:

Places(name="test", loc=[-87, 101]).save() 
Places(name="test 2", loc=[-87, 101]).save() 

लेकिन यदि आप एक थोक आप objects क्वेरीसमूह जैसे पर Places की कई घटनाओं के गुजरती हैं और कॉल कर सकते हैं insert सम्मिलित करना चाहते हैं:

Places.objects.insert([Places(name="test", loc=[-87, 101]), 
         Places(name="test 2", loc=[-87, 101])]) 
+3

धन्यवाद। मैं इसे अपरिवर्तित करने के लिए कैसे उपयोग कर सकता हूं। यदि वे नए हैं, तो मैं इन पंक्तियों को सम्मिलित करना चाहता हूं, और मौजूदा पंक्ति को अपडेट करें। क्या वहाँ कोई स्थान है .objects.upsert या places.object.insert upsert = True flag के साथ? – user1340513

+0

@Ross * NotUniqueError * से बचने के लिए कुछ आसान तरीका है? मैंने Pymongo थोक सम्मिलन में * आदेश * का उपयोग करने के बारे में कहीं कहीं पढ़ा, लेकिन मैं Mongoengine का उपयोग करना पसंद करेंगे। मैं _getCollection() के बारे में जानता हूं, लेकिन फिर भी मैं संग्रह को सीधे एक्सेस न करने से बचाना पसंद करूंगा। मैं Mongoengine वाक्यविन्यास का उपयोग करना पसंद करता हूं :) – giliev

+0

@Ross उपरोक्त में से कौन सा संचालन एक कुशल है जिसका मतलब है कि यह एक बचत() ऑपरेशन या थोक सम्मिलन ऑपरेशन है। – hkhr

4

आप दस्तावेज़ ऑब्जेक्ट को एक साथ कई दस्तावेज़ों के लिए प्रारंभ करने का प्रयास करते हैं। यदि आप mongoengine के बेसडॉक्यूमेंट कक्षा को देखते हैं, तो आप देखेंगे कि इसकी __init__ विधि कीवर्ड तर्कों का एक शब्दकोश लेती है, जो एक एकल दस्तावेज़ के फ़ील्ड से संबंधित होती है।

आप एक थोक बचाने क्या करना चाहते हैं, तो आप स्थानों उदाहरणों की एक सूची बनाने और इसे डालने() विधि को पारित करने के लिए की है।

a = [] 
a.append(places(**{"name": 'test', "loc": [-87,101]})) 
a.append(places(**{"name": 'test', "loc": [-88,101]})) 
x = places.objects.insert(a) 
संबंधित मुद्दे