在Mongoengine中,您可以查询未包含在列表的任何元素中的字符串吗?

时间:2015-05-01 18:40:54

标签: python mongodb mongoengine

我在Mongo中有以下形式的文件:

{
   type : '1234_CAKE'
},
{
   type : '1234_BEEF_63'
},
{
   type : '1234_CAKE'
},
{
   type : '1234_HAM_234'
},
{
   type : '1234_NAARTJIE'
}

我想查询类型中某处没有CAKEBEEF的所有文档。

我试过

Food.objects(type_not__icontains='cake')

用于省略蛋糕或任何其他单一类型,但我不知道将其扩展为多个

Food.objects(type_not__icontains=['cake', 'beef'])

引发异常。

1 个答案:

答案 0 :(得分:0)

您可以在mongodb中使用$nin运算符,它返回给定字段不存在或不存在的所有文档。 E.g。

Food.objects(type__nin=['cake', 'beef'])

为了使其不区分大小写,您可以使用$regex,但是一旦您的Food集合将包含大量记录,它将无法生效,因为非root的正则表达式不会即使它们存在,也利用索引。更好的解决方案是将数据非规范化以存储类型字段的小写版本并使用它。例如

Food.objects(newlowercasetype__nin=['cake', 'beef'])