MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để lấy dữ liệu ReferenceField trong mongoengine?

Hiện tại, điều này không được hỗ trợ trực tiếp vì MongoEngine chỉ hỗ trợ cú pháp json mở rộng của mongodb.

Tất cả những gì mongoengine thực hiện bên dưới là sử dụng json_utils của pymongo để kết xuất dữ liệu. Không có lý do gì khiến bạn không thể sử dụng nó một cách rõ ràng, ví dụ:

    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": []}

Đã cập nhật

Ví dụ với bộ truy vấn tùy chỉnh:

   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. MongoError:Tùy chọn 'con trỏ' là bắt buộc, ngoại trừ trường hợp tổng hợp với đối số giải thích

  2. Làm thế nào để giải quyết vấn đề thiếu giao dịch trong MongoDB?

  3. Làm cách nào để sử dụng Python để chuyển bsondump của MongoDB thành JSON?

  4. MongoDB Schema Design - Nhiều tài liệu nhỏ hay ít tài liệu lớn hơn?

  5. MongoDB GridFs với C #, làm thế nào để lưu trữ các tệp như hình ảnh?