2015-07-10 1 views
0

Я пытался создать запрос некоторые экземпляры Mongo переменные с питоном и MongoEngine мне нужно, чтобы получить все переменной от каждого RegistroPozo во всей коллекции.Quering вложенная документ запроса с Mongoengine

Пример кода:

from mongoengine import * 
class Variable(EmbeddedDocument): 
    mnem=StringField(required=True, max_length=200) 
    description=StringField(max_length=500) 
    unit=StringField(max_length=200,default='ppm') 
    alias=StringField(max_length=200) #,default=mnem 
    type=StringField(max_length=200,default='DEPENDANT') 



class RegistroPozo(EmbeddedDocument): 
    fecha = DateTimeField() 
    filepath = StringField() 
    start = FloatField() 
    step = FloatField() 
    stop = FloatField() 
    variables = EmbeddedDocumentListField(Variable) 
    registros = ListField(DictField()) 
    version_information_block = StringField(max_length=500) 
    well_information_block = StringField(max_length=500) 
    curve_information_block = StringField(max_length=500) 
    parameter_information_block = StringField(max_length=500) 
    other_block = StringField(max_length=500) 


class Pozo(DynamicDocument): 
    uwi_pozo = StringField(required=True, max_length=200, primary_key=True) 
    nom_pozo = StringField(required=True, max_length=200) 
    prof_total = FloatField(required=True) 
    elev_terr = FloatField(required=True) 
    long_pozo = FloatField(required=True) 
    lat_pozo = FloatField(required=True) 
    coord_x_po = FloatField(required=True) 
    coord_y_po = FloatField(required=True) 
    registros_pozo=EmbeddedDocumentListField(RegistroPozo) 

При попытке запроса я делаю много петель, но я верю, что есть лучший способ сделать это. Что-то вроде:

variables_in_all_the_doc = Pozo.objects(Q(AdvanceQuery)) 

ответ

0

Pozo является единым документом на уровне Монго дБ. Вложенный документ - это просто конструкции mongoengine. Поэтому, когда вы читаете объекты Pozo, все встроенные документы также доступны в одном запросе (отметьте с помощью mongostat). Теперь повторение этих данных не вызывает большого беспокойства. Для расширенных запросов EmbeddedDocumentList ознакомьтесь с документами here.