【问题标题】:MongoDB MongoEngine ListField get count() \ len()MongoDB MongoEngine ListField 获取 count() \ len()
【发布时间】:2013-12-13 12:08:47
【问题描述】:

这是我的文件

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\count 我需要类似的东西

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

我已经通过 mongo 控制台找到了如何做到这一点

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

但我需要通过 Mongoengine。

len(documents.Store.objects.get(store_id=27).items) 会检索所有文档然后通过 Python 计算它们吗?

【问题讨论】:

  • 您在控制台中的示例还检索项目列表并获取长度 - 与 mongoengine 示例相同。这样做的唯一方法是添加一个计数器字段(预先计算聚合)或使用聚合框架来投影和计算列表的大小
  • 所以,我添加了新字段 items_count = IntField(default=0) 以及 add_to_set inc 这个计数器如何?

标签: mongodb mongoengine


【解决方案1】:

是的,您可以在Store.objects.get(store_id = 27).items 上调用len() 函数,因为items 是BaseList 类型
像这样len(Store.objects.get(store_id = 27).items
但我找不到任何 mongoengine 语法 这很常见,因为BaseList 不是 mongoengine 类型:D

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多