mongoengine如何过滤字段不为空?

How do mongoengine filter field not null?

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

我试试:

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

但出现错误:

exclude() got an unexpected keyword argument 'category'

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

.exclude() method takes only positional arguments; fields name. That being you need to use a query operator 使用 category__ne=''

过滤掉类别为空字符串的文档
data = Data.objects(category__ne='').order_by('-datetime')[:500] 

我觉得您混淆了两个概念:过滤文档和 returning 文档子集。

返回文档子集

exclude 告诉 mongo 到 return 没有类别字段的选定文档。它不会过滤文档,只是 return 相同的文档,但没有类别字段:文档子集。剥离不需要的内容可以提高性能。 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