前言
以下是一个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语句,然后进行查询之后将结果进行转换
总结
以上就是关于mongo模糊查询的简单使用,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]