2013-10-10 39 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

相關問題