mongo中模糊查询怎么用

57次阅读
没有评论

共计 3244 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章主要介绍了 mongo 中模糊查询怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

以下是一个 mongo 查询的综合应用,即介绍一个生产中实际应用的模糊查询,当然其实也很简单,主要用到 mongo 中的模糊查询和 $or 查询,以及并的关系,下面是一个 mongo 中的一条记录

{ 
  _id  :  ffe6a068-9043-4334-97d2-75387340e655 , 
  file_id  :  ffe6a068-9043-4334-97d2-75387340e655 , 
  name  :  中国正大 , 
  update_time  : NumberInt(1554975642), 
  create_time  : NumberInt(1554975642), 
  content  :  中国正大相关信息 , 
  file_url  :  , 
  file_type  :  , 
  user_ids  : [
 1.0, 
 10.0
 ], 
  group_ids  : [ ], 
  is_common  : NumberInt(0), 
  confidence  : -1.0, 
  obj_id  :  , 
  source  :  , 
  content_time  :  , 
  author  :  , 
  summary  :  , 
  info_type  :  00 , 
  sub_info_type  :  , 
  title  :  , 
  word_num  : NumberInt(8)
}

对上面一条记录或者更多条记录我们生产中的需求是: 查询出集合中 (mongo 中的集合即是 mysql 中的表),name 或 content 中包含 正大 二字的记录 (关键词即是用户随机输入的,其实是一个变量),并且时间戳的值大于某一个开始时间和某一个结束时间 (这个也是用户在前端进行选择,然后我们拿到前端的请求来进行查询的),并且文件的类型即 info_type 字段的值为 00 ,“00”代表的是 word 也是前端用户选择后我们获取的条件之一,当然还有其他条件想进行尝试可以自由发挥

下面就是使用 mongo 语句进行实现的上面的需求:

db.getCollection(subscribe_test).find({$or:[{ name :{ $regex : 正大}},{content :{ $regex : 正大}}], update_time :{$gte:1,$lte:2000000000},info_type: 00 })

对于查询我们有的时候会选择在程序中进行,有的小伙伴会问上面的 mongo 语句怎么在编程语言中进行实现,下面是用 python 语言中进行实现的,我们会引用 python 中操作 mongo 的一个模块即 pymongo 模块可以使用 pip install pymongo 在控制台或 cmd 中进行一键安装,至于如何使用也很简单,可以自行百度或者访问我的另一篇博客:pymono 的简单使用,下面附上用 python 代码实现上面需求的业务代码:

import pymongo
import re
#  创建数据库连接
client = pymongo.MongoClient(host= 127.0.0.1 , port=8014) # 填写自己本机数据库的 ip 和 port 或者远程服务器数据库的 ip 和 port
#  指定数据库 db1,没有则创建数据库 db1
db = client.dataretrieve
#指定数据库中指定的表
collection=db.subscribe_test
 1、对表中的数据进行查询 
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,  只需省略该参数即可(默认省略)。query = {}
query[$or] = [ { name : re.compile( 正大)},
 {content : re.compile( 正大)},
query[file_type] =  00 
query[update_time] = {$gte : 0, $lte : 2000000000}
row=collection.find(filter=query)
for r in row:
 print(r[ content])

下面是生产中实际的开发代码,只供参考,只是把上面的一些常量,换成了从前端请求的数据:

def person_handler(req_params, page_size, search_offset):
  
  去 mongo 中查询个人数据
 :param req_params:
 :param page_size:
 :param search_offset:
 :return:
  
 results = []
 query = {}
 update_time = {}
 if  start_time  in req_params and req_params[start_time]:
 start_time = int(req_params[ start_time])
 update_time[$gte] = start_time
 if  end_time  in req_params and req_params[end_time]:
 end_time = int(req_params[ end_time])
 update_time[$lte] = end_time
 if update_time:
 query[update_time] = update_time
 if  file_type  in req_params and req_params[file_type]:
 query[file_type] = req_params[file_type]
 if  user_ids  in req_params and req_params[user_ids]:
 query[user_ids] = int(req_params[ user_id])
 serch_keywords = req_params[search_keywords]
 query[$or] = [ { name : re.compile(serch_keywords)},
 {content : re.compile(serch_keywords)},
 ]
 print(query)
 result = person_mongodao.search(filter=query).skip(search_offset).limit(page_size)
 count = person_mongodao.search(filter=query).skip(search_offset).limit(page_size).count()
 for row in result:
 results.append(row)
 additions = {word_segs : req_params[ search_keywords],  remind : 0}
 print(查询结果 , results)
 return results, additions, count

如果有小伙伴说我用的不是 python 语言譬如 java 用代码怎么实现呢?那么如果你会写 mysql 来实现上面的需求的话本博主可以推荐你使用 mongo 的一款可视化工具 Studio 3T 来将 mysql 语句转换成 mongo 语句,python 语句,java 语句等

mysql 语句也类似 mongo 语句有一个控制台可以来进行书写 mysql 语句,然后进行查询之后将结果进行转换

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“mongo 中模糊查询怎么用”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3244字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)