2013-06-25 3 views
0

это моя схемаmongoengine обновление встроенного поля

class Url_per_date(EmbeddedDocument): 
    date = DateTimeField() 
    count = IntField(default=0) 

class Daily_visit(Document): 
    domain = StringField() 
    count = IntField(default=0) 
    per_date = ListField(EmbeddedDocumentField('Url_per_date')) 

У меня есть коллекции, как это:

{ 
"_id" : ObjectId("51c97e685aa3b3414c7e406a"), 
"_types" : "Daily_visit", 
"count" : 1, 
"domain" : "yahoo.com", 
"per_date" : { 
     "count" : 1, 
     "date" : ISODate("2013-05-20T00:00:00Z") 
    } 
} 

мне нужно обновить yahoo.com по диапазону дат. если per_date не имеет ISODate («2013-05-20T00: 00: 00Z»), мне нужно его создать, если у меня есть inc__count = 1.

ответ

0

на первый ваш результат должен быть, как этот

{ 
"_id" : ObjectId("51c97e685aa3b3414c7e406a"), 
"_types" : "Daily_visit", 
"count" : 1, 
"domain" : "yahoo.com", 
"per_date" : [{ 
     "count" : 1, 
     "date" : ISODate("2013-05-20T00:00:00Z") 
    }] 
} 

как дата создания? создать новый на сегодняшний день и выберите базу данных, как этот

today = datetime.today() 
try: 
    yahoo_obj = Daily_visit.objects.get(domain="yahoo.com", per_date__date=date) 
    yahoo_obj.per_date[-1].count += 1 
except: 
    yahoo_obj = Daily_visit.objects.get(domain="yahoo.com") 
    yahoo_obj.per_date = .... # just append new list 
1

В MongoEngine, встроенные поля ссылки, заменив точечную нотацию с двойным подчеркиванием:

поле на встроенных документах также может быть отнесено к использованию поля поиск синтаксиса с помощью двойного подчеркивания вместо точки доступа в синтаксисе атрибута объекта:

http://mongoengine-odm.readthedocs.org/en/v0.6.8/guide/querying.html#filtering-queries