MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

mongoengine में ReferenceField डेटा कैसे प्राप्त करें?

वर्तमान में यह सीधे समर्थित नहीं है क्योंकि MongoEngine केवल mongodb के विस्तारित जोंस सिंटैक्स का समर्थन करता है।

कवर के तहत सभी mongoengine pymongo के json_utils का उपयोग करता है डेटा डंप करने के लिए। इसका कोई कारण नहीं है कि आप इसका स्पष्ट रूप से उपयोग नहीं कर सकते जैसे:

    from bson import json_util

    class Inbox(db.Document):
        from_user    = db.ReferenceField(User, required=True)
        subject      = db.StringField(max_length=255, required=True)
        created_at   = db.DateTimeField(default=datetime.now)
        messages     = db.ListField(db.EmbeddedDocumentField(Message))


        def to_json(self):
            data = self.to_mongo() // get the pymongo representation of the document
            data["from_user"] = {"User": {"username": self.from_user.username}}
            return json_util.dumps(data)

            User.drop_collection()

    ...

    Inbox.drop_collection()

    ross = User(username="Ross").save()
    Inbox(from_user=ross, subject="Mongoengine should make json easier").save()

    doc = Inbox.objects.only('from_user', 'subject', 'created_at').get()
    print doc.to_json()

    {"_id": {"$oid": "538c3d71c3d384172fe35393"}, 
     "from_user": {"User": {"username": "Ross"}}, 
     "subject": "Mongoengine should make json easier", 
     "created_at": {"$date": 1401703297198}, "messages": []}

अपडेट किया गया

कस्टम क्वेरीसेट के साथ उदाहरण:

   from bson import json_util

    class CustomQuerySet(QuerySet):
         def to_json(self):
            return "[%s]" % (",".join([doc.to_json() for doc in self]))

    class Inbox(Document):
        from_user    = ReferenceField(User, required=True)
        subject      = StringField(max_length=255, required=True)
        created_at   = DateTimeField(default=datetime.now)
        messages     = ListField(EmbeddedDocumentField(Message))

        meta = {'queryset_class': CustomQuerySet}

        def to_json(self):
            data = self.to_mongo()
            data["from_user"] = {"User": {"username": self.from_user.username}}
            return json_util.dumps(data)

  ...
  ipdb> Inbox.objects.only('from_user', 'subject', 'created_at').to_json()
        '[{"_id": {"$oid": "538d84cbc3d3843eeeb5dbbe"}, 
           "from_user": {"User": {"username": "Ross"}}, 
           "subject": "Mongoengine should make json easier", 
           "created_at": {"$date": 1401787099246}, "messages": []}]'



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB रेगेक्स, सूचकांक और प्रदर्शन

  2. कई भाषाओं का उपयोग करके मोंगोडब पाठ खोज

  3. MongoDB में क्वेरी परिणामों में एक फ़ील्ड का नाम बदलें

  4. सरणी तत्वों के लिए एकाधिक मानदंड निर्दिष्ट करें

  5. मोंगो डीबी को एक कमांड में कैसे रोकें