Mongo 多语言模糊匹配
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 多语言模糊匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当你在浏览器输入一个网址,如http:/
- 下一篇: ThreadLocal和线程同步机制的对