2013-12-13 8 views
1

вот мой документMongoDB MongoEngine ListField получить отсчет() Len()

class Store(Document): 
    store_id = IntField(required=True) 
    items = ListField(ReferenceField(Item, required=True)) 
    meta = { 
     'indexes': [ 
      { 
       'fields': ['campaign_id'], 
       'unique': True 
      }, 
      { 
       'fields': ['items'] 
      } 
     ] 
    } 

Я не могу найти, как получить ListField Len \ счетчик с извлечения весь список мне нужно что-то вроде

documents.Store.objects.get(store_id=27).items.count() 

Я нашел вай, как сделать это с помощью консоли Монго

db.store.find({"store_id" : 27})[0].items.length; 

, но мне нужно через Mongoengine.

Может ли len (documents.Store.objects.get (store_id = 27) .items) получить все документы и подсчитать их через Python?

+0

Возможный дубликат [Получение длины списка в MongoDB] (http://stackoverflow.com/questions/13958490/retrieving-the-length-of-a-list-in-mongodb) – Ross

+0

Ваш пример в консоли также извлекает список предметов и получает длину - то же самое, что и mongoengine e Xample. Единственный способ сделать это - либо добавить поле счетчика (предварительно вычислить агрегацию), либо использовать структуру агрегации для проектирования и вычисления размера списка – Ross

+0

, поэтому я добавил новое поле items_count = IntField (по умолчанию = 0) и как на add_to_set inc этот счетчик? –

ответ

0

да вы можете вызвать len() функцию на Store.objects.get(store_id = 27).items, потому что items является BaseList типа
как этот len(Store.objects.get(store_id = 27).items
, но я не могу найти mongoengine синтаксис этой и это обычно, потому что BaseList не тип mongoengine: D

Смежные вопросы