首页 > 解决方案 > 如何查询:数组不包含(不区分大小写)元素

问题描述

我正在尝试检索标签数组不包含忽略大小写的元素的文档。

我正在使用我的数组的逆包含查询:

.find({"tags":{"$regex": "^(?!someTag$)", "$options": "i"}})

但是,此返回还会返回标签不是“someTag”的文档。

标签: mongodbmongodb-query

解决方案


您可以array does not include使用 not equal 运算符获得行为,并使用collat​​ion$ne获得不区分大小写的行为。

考虑一个包含多个标签的集合:

> db.coll.find({},{_id:0})
{ "tags" : [ "Tag1", "Tag2", "Tag3" ] }
{ "tags" : [ "tag1", "tag2", "tag3" ] }
{ "tags" : [ "TAG4", "TAG3", "TAG5" ] }
{ "tags" : [ "tag4", "tag6", "tag7" ] }

$ne可用于排除完全匹配:

> db.coll.find({tags:{$ne:"tag3"}},{_id:0})
{ "tags" : [ "Tag1", "Tag2", "Tag3" ] }
{ "tags" : [ "TAG4", "TAG3", "TAG5" ] }
{ "tags" : [ "tag4", "tag6", "tag7" ] }

添加排序规则后,$ne匹配可以不区分大小写:

> db.coll.find({tags:{$ne:"tag3"}},{_id:0}).collation({locale:"en",strength:1})
{ "tags" : [ "tag4", "tag6", "tag7" ] }

请注意,为了在此查询中使用索引,您需要使用相同的排序规则创建适当的索引。


推荐阅读