mongodb - 如何查询:数组不包含(不区分大小写)元素
问题描述
我正在尝试检索标签数组不包含忽略大小写的元素的文档。
我正在使用我的数组的逆包含查询:
.find({"tags":{"$regex": "^(?!someTag$)", "$options": "i"}})
但是,此返回还会返回标签不是“someTag”的文档。
解决方案
您可以array does not include
使用 not equal 运算符获得行为,并使用collation$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" ] }
请注意,为了在此查询中使用索引,您需要使用相同的排序规则创建适当的索引。
推荐阅读
- powerbi - Power Bi - 每个月的类别计数
- c# - 如何将字节 [] 存储在 c# 中的文本文件中?
- python - 使用带有错误处理的`with Pool() as p`
- javascript - 有人可以帮我解决这个问题吗?
- javascript - 如何让网站(EarthTV)直播进入 Discord js 机器人?
- python-3.x - 表情符号模块名称在 python3 中不起作用
- python - 模型如何知道我的数据被标记为什么?
- python - 如何在屏幕上添加电子邮件?
- java - DiskCacheStrategy 无法解析为变量
- c++ - 对临界区使用智能指针