2010-05-06 15 views
77

मैं mongodb का उपयोग करने के लिए sqlalchemy (sqlite) से कनवर्ट करने की कोशिश कर रहा हूं। मुझे स्कीमा वर्टिफिकेशन चाहिए। मैं mongokit देख रहा हूँ, लेकिन मुझे मैपर के समान कुछ चाहिए, ताकि यह वस्तु की संपत्ति से बचाए, न कि एक निर्देश।मोंगो डीबी ओआरएम?

मुझे एक मैपर चाहिए ताकि मैं उन्हें संशोधित किए बिना मौजूदा वस्तुओं का उपयोग कर सकूं।

+1

, यह होना चाहिए "डीआरएम" (दस्तावेज़-संसाधन-मैपिंग) कहा जाता है – zsong

+0

इससे आपको अपनी क्वेरी का उत्तर देने में मदद करनी चाहिए http://docs.mongodb.org/ecosystem/drivers/php-libraries/ – Basav

+0

मोंगलिया नामक एक लाइब्रेरी है जिसे आप मोंगो से बातचीत करते हैं ऑब्जेक्ट्स या डिक्शनरी एक्सेस के माध्यम से ऑब्जेक्ट्स और स्कीमा सत्यापन है जिसे आप सक्षम कर सकते हैं : https://github.com/zagaran/mongolia – Zags

उत्तर

61

एक और विकल्प MongoEngine है। मोंगोइंजिन के लिए ओआरएम Django द्वारा उपयोग किए जाने वाले ओआरएम के समान है।

उदाहरण (ट्यूटोरियल से):

class Post(Document): 
    title = StringField(max_length=120, required=True) 
    author = ReferenceField(User) 

class TextPost(Post): 
    content = StringField() 

class ImagePost(Post): 
    image_path = StringField() 

class LinkPost(Post): 
    link_url = StringField() 
+14

AFAIK था।आप मोंगोएन्गिन के दस्तावेज़ में फ्लाई पर गुण नहीं जोड़ सकते हैं। मोंगोडब से किस तरह का मजा आता है। – tutuca

+7

यदि आपको आवश्यकता हो तो आप किसी भी तरह का स्कीमलेस डेटा जोड़ने के लिए डिक्टफिल्ड का उपयोग कर सकते हैं। – neuman

+0

या जेनेरिक एम्बेडेड डॉक्यूमेंट? – tunnuz

28

आप MongoKit चाहते हैं। यह PyMongo से अधिक अमूर्तता की एक परत है। सुनिश्चित नहीं है कि आप Django का उपयोग कर रहे हैं, लेकिन django-mongokit एकीकरण भी है।

इस blog post से उदाहरण। ध्यान दें कि संरचना के परिभाषित होने के बाद कंप्यूटर के उदाहरण सीधे/मॉडल को संदर्भित कर सकते हैं (उदा। Atari.make, c64.model, ...)। शब्दकोशों की कोई आवश्यकता नहीं:

import datetime 
from mongokit import Document 

class Computer(Document): 

    structure = { 
     'make': unicode, 
     'model': unicode, 
     'purchase_date': datetime.datetime, 
     'cpu_ghz': float, 
    } 

    validators = { 
     'cpu_ghz': lambda x: x > 0, 
     'make': lambda x: x.strip(), 
    } 

    default_values = { 
     'purchase_date': datetime.datetime.utcnow, 
    } 

    use_dot_notation = True 

    indexes = [ 
     {'fields': ['make']}, 
    ] 
+0

मौजूदा व्यापार तर्क वस्तुओं को संशोधित किए बिना ऐसा करने का कोई तरीका है? sqlalchemy में, आप मैपर का उपयोग कर सकते हैं। – Timmy

+0

अधिक सर्जिकल परिवर्तन। आपकी निर्भरता ग्राफ को साफ रखता है। समझ में आता है, हालांकि मुझे इसे सीधे करने का कोई तरीका नहीं दिख रहा है। शायद मोंगो कंप्यूटर (कंप्यूटर, दस्तावेज़) या मिश्रण के कुछ रूपों के साथ कुछ अजीब बात है? दिलचस्प ... –

+0

sqlalchemy में इसकी साफ, इस प्रकार सवाल, – Timmy

36

नहीं या तो MongoKit या MongoEngine से संतुष्ट होने, मैं अजगर के लिए अपने ही वस्तु उन्मुख इंटरफ़ेस लिखने का फैसला किया।

मैंने सभी प्रश्न सीधे पिमोंगो को सौंप दिया, इसलिए क्वेरी सिंटैक्स वही है। अधिकांशतः, यह परिणाम के चारों ओर एक ऑब्जेक्ट-रैपर है, कुछ अन्य सहायक जैसे डेटाबेस कनेक्शन पूलिंग, डीबीआरआईफ़ समर्थन, और आपके जीवन को आसान बनाने के लिए अन्य सुविधा विधियों के साथ।

इसे Minimongo कहा जाता है और यह गीथब से उपलब्ध है। हैप्पी हैकिंग!

उदाहरण:

from minimongo import Model, MongoCollection 

class MyObject(Model): 
    model = MongoCollection(database='test', collection='my_collection') 

m = MyObject() 
m.x = 1 
m.field = 'value' 
m.other = {'list': True} 
m.save() 

x = MyObject({'x': 1, 'y': 2}).save() 

objs = MyObject.find({'x': 1}) 
for o in objs: 
    print o 
+0

का उपयोग करके मोंगोएन्गिन का उपयोग करने के बजाय सीधे मोंगोड के साथ Django ORM का उपयोग कर सकते हैं यह बहुत उपयोगी और सरल है, मैं बस कुछ चाहता था ताकि मैं शब्दकोश बनाने में अटक नहीं है, और कुछ नहीं। – vishalv2050

+1

यह वास्तव में अच्छा है। बहुत बुरा यह अब और नहीं बनाए रखा है :( –

13

मैं जानता हूँ कि मैं वास्तव में इस सवाल का देर हो रही है, लेकिन मैं मिंग http://merciless.sourceforge.net, एक SQLAlchemy से प्रेरित MongoDB सत्यापन और ORM इंजन के लेखक हूँ। सोर्सफोर्ज में हम इसका उपयोग करते हैं, और http://www.slideshare.net/rick446/rapid-and-scalable-development-with-mongodb-pymongo-and-ming पर एक उचित प्रस्तुति उपलब्ध है और साथ ही साथ स्क्लाक्लेमी से मिंग http://www.slideshare.net/__amol__/from-sqlalchemy-to-ming-with-turbogears2 पर माइग्रेट करने पर केस स्टडी भी उपलब्ध है।

class WikiPage(MappedClass): 

    class __mongometa__: 
     session = session 
     name = 'wiki_page' 

    _id = FieldProperty(schema.ObjectId) 
    title = FieldProperty(str) 
    text = FieldProperty(str) 
    comments=RelationProperty('WikiComment') 

प्रश्नों मानक MongoDB क्वेरी सिंटैक्स (नहीं Django ORM का जादू कीवर्ड तर्क) का उपयोग करें:: यहाँ मिंग में ORM परत का एक उदाहरण (ट्यूटोरियल से) है को सटीकता से

WikiComment.query.find(dict(page_id=wp._id)) 
+0

मिंग हमारे लिए जाने का रास्ता प्रतीत होता है। इसमें लचीलापन और स्कीमा-आश अवधारणाएं हैं जो हमें चाहिए। जब ​​हमें बिजली की आवश्यकता होती है तो हम पिमोंगो तक गिर जाते हैं। – jochem

+0

मैं मोंगो और पायथन के लिए नया हूं क्या कोई ट्यूटोरियल है जहां मैं django के model.py जैसे मॉडल बनाने और मिंग का उपयोग करके माइग्रेशन स्क्रिप्ट बनाने के लिए संदर्भित कर सकता हूं। – Varad

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