【问题标题】:How do mongoengine filter field not null?mongoengine如何过滤字段不为空?
【发布时间】:2015-11-24 07:46:29
【问题描述】:

我想过滤具有category 值的数据,但我不知道如何在mongoengine 中执行此操作。

我试试:

data = Data.objects.exclude(category="").order_by('-datetime')[:500]  

但出现错误:

exclude() got an unexpected keyword argument 'category'

我在文档中没有找到方法,你是怎么做到的?

【问题讨论】:

    标签: python mongodb mongodb-query mongoengine


    【解决方案1】:

    我感觉您混淆了两个概念:过滤文档和返回文档子集。

    返回文档子集

    exclude 告诉 mongo 返回不带类别字段的选定文档。它不会过滤文档,只返回相同的文档,但没有类别字段:文档子集。去掉不需要的东西可以提高性能。 excludeonly 实现相同的目标,除了 exclude 将字段列入黑名单,而 only 将字段列入白名单。

    过滤文档

    您想要的是使用查询集过滤文档:

    data = Data.objects({'category':{'$ne':''}}).order_by('-datetime')[:500]
    

    或使用double underscore syntax:

    data = Data.objects(category__ne='').order_by('-datetime')[:500]
    

    the tutorial

    【讨论】:

    • limit 和 slice 是一样的这里是doc
    【解决方案2】:

    .exclude() 方法只接受位置参数;字段名称。那就是您需要使用query operator 过滤掉类别为空字符串的文档,使用category__ne=''

    data = Data.objects(category__ne='').order_by('-datetime')[:500] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多