2013-10-10 37 views
0

当我拥有EmbeddedDocument对象时,如何访问Document对象? 例如:MongoDB,MongoEngine:如何通过其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我还没有发现这样的事。

+0

没有得到您的问题。你想做什么。 'ToySale'获得'Toy'? – alexvassel

回答

0

问题已解决。

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) 
2

您可以通过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

+0

你给了我一个主意。 – zen11625

相关问题