繁体   English   中英

MongoDB,MongoEngine:如何通过EmbeddedDocument获取文档?

[英]MongoDB, MongoEngine: How to get Document by its EmbeddedDocument?

拥有嵌入式文档对象后,如何访问文档对象? 例如:

class ToySale(EmbeddedDocument):
    end_time = FloatField()
    percentage = IntField()

    @property
    def super_price(self):
        # I want to get access to Toy Document, something like that
        return self.toy.price - (self.percentage * self.toy.price / 100)

class Toy(Document)
    sale = EmbeddedDocumentField(ToySale)
    price = IntField()

Django ORM具有类似的“ related_name”机制,但是在mongoengine ORM中我没有找到类似的东西。

您可以通过EmbeddedDocument字段获取文档。

例如,通过end_time

Toy.objects(sale__end_time=3.14)

percentage

Toy.objects(sale__percentage=3)

两者:

Toy.objects(sale__end_time=3.14, sale__percentage=3)

如果您已经拥有EmbeddedDocument ,例如toy_sale ,则可以执行以下操作:

Toy.objects(**{'sale__' + key: value 
               for key, value in toy_sale.to_mongo().items()
               if not key.startswith('_')})

要不就:

Toy.objects(sale=toy_sale)

请参阅文档: http : //mongoengine-odm.readthedocs.org/en/latest/guide/querying.html#filtering-queries

问题解决了。

class ToySale(EmbeddedDocument):
    end_time = FloatField()
    percentage = IntField()
    uid = IntField()

    @property
    def super_price(self):
        toy = Toy.objects(sale__uid=self.uid)  # get Document by EmbeddedDocument
        return toy.price - (self.percentage * toy.price / 100)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM