Mongo 多语言模糊匹配
Mongo 多語(yǔ)言模糊匹配
記一次mongo聚合查詢匹配時(shí),需要模糊匹配多語(yǔ)言下的文本
mongo存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)如下:
{"_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": "簡(jiǎn)介"}},"upload_time": {"$date": {"$numberLong": "1640163616000"}},"down_load_address": "","material_md5": "dsdscsdsad","file_size": 122,"cover_photo_address": "" }查詢條件:模糊匹配 material_info下所有語(yǔ)言版本的 name的文本
思路如下:
1,利用 $objectToArray 把material_info 這個(gè)object 對(duì)象轉(zhuǎn)為 一個(gè)數(shù)組
2,利用 $unwind 把數(shù)組拆分一條條的數(shù)據(jù)
3,利用 $regex 模糊匹配 所有的數(shù)據(jù)中的 name的文本,找到符合的結(jié)果
查詢語(yǔ)句如下:
[ {"$project":{"lang":{"$objectToArray":"$material_info"}, "material_id":1 }},{"$unwind":"$lang"}, {"$match":{"lang.v.name":{"$regex":"44"} }} ]來(lái)分析一下每一步的結(jié)果:
1,利用 $objectToArray 把material_info 這個(gè)object 對(duì)象轉(zhuǎn)為 一個(gè)數(shù)組,這一步主要是為了把object對(duì)象轉(zhuǎn)換為數(shù)組,執(zhí)行結(jié)果如下:
2,利用 $unwind 把數(shù)組拆分一條條的數(shù)據(jù),這一步是為了把 lang 這個(gè)數(shù)組拆開了成單一的對(duì)象,這樣就可以直接進(jìn)行條件的匹配
3,利用 $regex 模糊匹配 所有的數(shù)據(jù)中的 name的文本,找到符合的結(jié)果,經(jīng)過(guò)前面兩步后,現(xiàn)在管道里面的數(shù)據(jù)列表已經(jīng)是一條條拆分好的數(shù)據(jù),可以直接進(jìn)行過(guò)濾即可
總結(jié):主要是把復(fù)雜的object對(duì)象(類似于map),拆分成一個(gè)個(gè)獨(dú)立的對(duì)象列表(類似于把map轉(zhuǎn)成一個(gè)list),然后再把 list 拆解開來(lái),最后進(jìn)行條件過(guò)濾即可
參考如下:
mongo官方文檔:https://www.mongodb.com/docs/manual/reference/operator/aggregation/objectToArray/
總結(jié)
以上是生活随笔為你收集整理的Mongo 多语言模糊匹配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 当你在浏览器输入一个网址,如http:/
- 下一篇: ThreadLocal和线程同步机制的对