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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值