2014-06-10 8 views
5

मैं pymongo उपयोग कर रहा हूँ एक अलग प्रणाली से पुराने जानकारी के साथ एक डेटाबेस बीज के के बजाय स्ट्रिंग _ id का उपयोग करने के pymongo, और मैं इस तरह के प्रश्नों का एक बहुत कुछ है:कॉन्फ़िगर ObjectId

studentId = studentsRemote.insert({'price': price}) 

वास्तविक अजगर में स्क्रिप्ट, studentId स्ट्रिंग के रूप में प्रिंट करता है, लेकिन जावास्क्रिप्ट उल्का एप्लिकेशन में मैं इस डेटा का उपयोग कर रहा हूं, यह हर जगह ObjectId(...) के रूप में दिखाई देता है।

मैं pymongo कॉन्फ़िगर स्ट्रिंग के रूप _id उत्पन्न करने के लिए और ObjectId के

किसी भी वस्तुओं मैं उल्का विनिर्देश स्ट्रिंग प्रारूप, और नहीं ObjectId प्रारूप का उपयोग करेगा के साथ बनाने के साथ परेशान नहीं करना चाहते हैं। मैं अपने आवेदन में आईडी प्रकारों का मिश्रण नहीं करना चाहता, क्योंकि यह मुझे अंतःक्रियाशीलता सिरदर्द पैदा कर रहा है।

मुझे पता है कि मैं create ObjectId's from Meteor कर सकता हूं लेकिन स्पष्ट रूप से मैं स्ट्रिंग प्रारूप का उपयोग करना चाहता हूं। यह उल्का डिफ़ॉल्ट है, यह बहुत आसान है, और I can't find any good reason to use ObjectId's in my particular app

The valueOf() mongo function या कुछ ऐसा ही _id को पार्स कर सकता है और डेटाबेस में एक बार दस्तावेज़ को अपडेट करने के लिए उपयोग किया जा सकता है, लेकिन कुछ और प्रत्यक्ष होना अच्छा लगेगा।

उत्तर

3

यह काफी सरल हो गया।

son_manipulator module का उपयोग आने वाले दस्तावेजों को एक अलग रूप में बदलने के लिए किया जा सकता है। अधिकांश समय this is used to encode custom objects, लेकिन यह इसके लिए भी काम किया।

जगह में मैनिपुलेटर के साथ, यह परिवर्तन करने के लिए calling the str() function on the ObjectId का मामला था।

from pymongo.son_manipulator import SONManipulator 
class ObjectIdManipulator(SONManipulator): 
    def transform_incoming(self, son, collection): 
     son[u'_id'] = str(son[u'_id'])  
     return son 

db.add_son_manipulator(ObjectIdManipulator()) 
+1

ऐसा प्रतीत होता है कि add_son_manipulator() अब बहिष्कृत है। मुझे एक उपयुक्त विकल्प खोजने में परेशानी हो रही है। क्या किसी के पास कोई विचार है? ऐसा लगता है कि यह Python 2.7.10 में वैसे भी काम नहीं कर रहा है। मैंने transform_incoming() विधि के अंदर एक ब्रेकपॉइंट और प्रिंट स्टेटमेंट जोड़ा, कोड उस बिंदु तक कभी नहीं पहुंचता है। –

4

.py फ़ाइलों में:

from bson.objectid import ObjectId 
...... 
kvdict['_id'] = str(ObjectId()) 
...... 
mongoCollection.insert(kvdict) 

यह ठीक है!

+0

यह काम कर रहा है ... _id को _id जोड़ना, उस _id का उपयोग करने के लिए बल mongo और डिफ़ॉल्ट ऑब्जेक्ट() नहीं – Izack

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