Mongo 多语言模糊匹配

记一次mongo聚合查询匹配时,需要模糊匹配多语言下的文本

mongo存储数据结构如下:

{"_id": {"$oid": "61c2e92057ee825fb31c8448"},"created": {"$date": {"$numberLong": "1640163616884"}},"modified": {"$date": {"$numberLong": "1640163616884"}},"material_id": "m10034","uid": {"$numberLong": "992128"},"material_info": {"en-US": {"name": "size","introduction": "size"},"zh-CN": {"name": "中文","introduction": "简介"}},"upload_time": {"$date": {"$numberLong": "1640163616000"}},"down_load_address": "","material_md5": "dsdscsdsad","file_size": 122,"cover_photo_address": ""
}

查询条件:模糊匹配 material_info下所有语言版本的 name的文本

思路如下:

1,利用 $objectToArray 把material_info 这个object 对象转为 一个数组

2,利用 $unwind 把数组拆分一条条的数据

3,利用 $regex 模糊匹配 所有的数据中的 name的文本,找到符合的结果

查询语句如下:

[ {"$project":{"lang":{"$objectToArray":"$material_info"}, "material_id":1 }},{"$unwind":"$lang"}, {"$match":{"lang.v.name":{"$regex":"44"} }} ]

来分析一下每一步的结果:

1,利用 $objectToArray 把material_info 这个object 对象转为 一个数组,这一步主要是为了把object对象转换为数组,执行结果如下:

2,利用 $unwind 把数组拆分一条条的数据,这一步是为了把 lang 这个数组拆开了成单一的对象,这样就可以直接进行条件的匹配
3,利用 $regex 模糊匹配 所有的数据中的 name的文本,找到符合的结果,经过前面两步后,现在管道里面的数据列表已经是一条条拆分好的数据,可以直接进行过滤即可

总结:主要是把复杂的object对象(类似于map),拆分成一个个独立的对象列表(类似于把map转成一个list),然后再把 list 拆解开来,最后进行条件过滤即可

参考如下:

mongo官方文档:https://www.mongodb.com/docs/manual/reference/operator/aggregation/objectToArray/

Mongo 多语言模糊匹配相关推荐

  1. 【Elasticsearch】语言处理系列之打字或拼写错误 模糊匹配 字段纠错 Fuzzy multi_match

    1.概述 转载:https://www.cnblogs.com/richaaaard/p/5282630.html 摘要 我们喜欢在对结构化数据(如:日期和价格)做查询时,结果只返回那些能精确匹配的文 ...

  2. solr 模糊匹配_Solr中的前缀和后缀匹配

    solr 模糊匹配 搜索引擎都是关于查找字符串的. 用户输入一个查询词,然后从反向索引中检索它. 有时,用户正在寻找的值只是索引中值的子字符串,并且用户可能也对这些匹配感兴趣. 对于德语这样的包含复合 ...

  3. python 模糊匹配_很冷门,但非常实用的 Python 库

    Python 是一个很棒的语言.它是世界上发展最快的编程语言之一.它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性.整个 Python 及其库的生态系统使它成为全世界用户(初学者和 ...

  4. 模糊查询是如何进行实现的_模糊查找,不是近似查找!在Excel中应该如何进行模糊匹配...

    前两天,发了一篇文章,介绍了一个微软收集用户反馈的网站,如果你希望Excel中有什么功能,可以到这个网站上提交建议,或者给别人的建议投票,文章内容见这里: 你最想要的Excel功能是什么? 有一位同学 ...

  5. python 模糊匹配_Case2:模糊匹配工具

    一.需求角度 1.使用情景 多组(大量,成百上千条)数据的情况下,给单个数据某一属性的非结构化录入值(尤其是文本信息,如地址等)以相应的关键词打上标签,便于后续的数据透视或相关处理. 2.使用人群 像 ...

  6. Postgresql学习笔记之——模糊匹配LIKE、SIMILAR TO和POSIX正则表达式

    1.介绍 Postgresql数据库中提供三种实现模糊匹配的方式: 1.传统的SQL的LIKE操作. 2.SQL99中SIMILAR TO操作符. 3.POSIX风格的正则表达式. 另外还有一个模式匹 ...

  7. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  8. python selenium xpath_python+selenium十四:xpath和contains模糊匹配

    xpath可以以标签定位,也可以@任意属性: 如:以input标签定位:driver.find_element_by_xpath("//input[@id='kw']") 如:@t ...

  9. JQuery 模糊匹配

    [属性名称]         匹配包含给定属性的元素       [att=value]       匹配包含给定属性的元素       [att*=value]     模糊匹配       [at ...

  10. grep 模糊匹配_vim 的模糊查找插件 LeaderF 新功能介绍(二)

    前言 本文介绍自<vim 的模糊查找插件 LeaderF 新功能介绍>以后,LeaderF增加的一些新的功能. 异步grep Leaderf rg 此功能已经在<vim的grep插件 ...

最新文章

  1. 使用Fiddler抓取手机HTTP流量包
  2. 无需用户输入!Adobe提出自动生成高质量合成图像新方法
  3. python语言语句块标记是_Python的基本语法——语句块
  4. tomcat的服务器目录在哪个文件夹,Tomcat目录结构详细介绍
  5. 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)...
  6. 443端口与80端口
  7. iis的Excel的0x80070005解决方案
  8. Android 上唯一好用的图片标注 App:马克标注
  9. redis的三大模式主从,哨兵和集群
  10. java程序制作成可执行.exe文件
  11. 如何判断两条直线是否相交
  12. 十四、策略模式——你要黄焖鸡、手撕鸡、大盘鸡、叫花鸡都可以,指定一个吧
  13. 人与机器人的交互理论及其前景
  14. STM32——RTC实时时钟原理+BKP寄存器原理
  15. web攻防之跨站脚本攻击漏洞
  16. Kubernets集群管理-升级 kubernetes 集群版本到v1.21.14
  17. 第三代人工智能基础设施背后,是一次技术应用的常识普及运动
  18. 合并报表软件选哪个?这篇文章两分钟告诉你!
  19. 淘宝主图优化技巧 测试淘宝女鞋主图点击率方法
  20. SQL为什么动不动就百行以K记?

热门文章

  1. Excel常用统计分析函数分享
  2. 博客搬家工具(服务)详解
  3. Unity 3D | 在Unity3D中创建/执行C#脚本
  4. oracle数据库管理和日常维护,oracle数据库管理与维护
  5. 网管员的最爱!解密六款低成本RADIUS
  6. 学校源码php,闪灵CMS学校建站系统(含小程序) v5.0 bulid20200319_php免费源码
  7. 学生管理系统(软件工程)
  8. redis 学习笔记(六) sorted_set数据类型
  9. kafka报org.apache.kafka.common.errors.RecordTooLargeException
  10. MATLAB表上作业法解决运输问题