mongo中的模糊查询

Wesley13
• 阅读 756

以下是一个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语句等

mongo中的模糊查询

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

mongo中的模糊查询

以上就是关于mongo模糊查询的简单使用,希望对你有所帮助,原创不易,转载请说明出处,谢谢!!!!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java使用elasticsearch进行模糊查询
java使用elasticsearch进行模糊查询使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路,具体实现大家可以看后面文章,若其中有不适,请大家多多包涵一、ES模糊查询(一)不含中文模糊查询,适用于数字SearchResponse
Wesley13 Wesley13
3年前
java中实现对list的模糊查询
比如我有下面这样一个List,里面存放的是多个Employee对象。然后我想对这个List进行按照Employee对象的名字进行模糊查询。有什么好的解决方案么?比如我输入的查询条件为“wang”,那么应该返回只包含employee1的List列表。ListlistnewArrayList();Employeeemplo
Wesley13 Wesley13
3年前
SQL中哪些情况会引起全表扫描
1、模糊查询效率很低:原因:like本身效率就比较低,应该尽量避免查询条件使用like;对于like’%…%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然会效率很低;另外由于匹配算法的关系,模糊查询的字段长度越大,查询的效率就越低。解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至
Peter20 Peter20
3年前
mysql like查询(模糊查询)
在结构化查询语言中,LIKE语句有着至关重要的作用。  LIKE语句的语法格式是:select\from表名where字段名like对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。  A:%包含零个或多个字符的任意字符串:1、LIKE'Mc%'将搜索以字母Mc开头的所有字符串(如M
Wesley13 Wesley13
3年前
mongo实现分页模糊查询
使用mongo做分页查询我使用的是pymongo,pymongo的函数库非常接近mongo的原生命令行。在使用普通的find查找的时候,可以使用pymongo的limit与skip函数形如:cursordb.compo_message.find({"上传人":updateuser,"$an
Stella981 Stella981
3年前
Redis数据库常用操作
keys\  查询全部keysabc\  模糊查询flushdb  删除当前数据库中的全部数据flushall  删除全部数据库中的数据setKEYVALUE  设置数据getKey  获取数据setuser{name:smith,age:10}  设置json结构setnxKEYVALUE  设置不重复s
Wesley13 Wesley13
3年前
MongoDB增删改查
MongoDB增删改查查询数据库:showdbs进入数据库:useMYDB查询数据库中表:showtables在mongo中创建新的用户并赋予相应权限:db.createUser({user:<name_string,
Stella981 Stella981
3年前
Ruby2.3.3操作MongoDB入门(Mongo驱动版本2.4.3)
接着上篇博文,继续学习Ruby操作Mongo数据库,本博文介绍的是MongoDB的基本数据,即数据库的CRUD操作(创建,查询,更新,删除)1.创建一个集合,插入一个文档1.1如果是将单个文档插入结果,使用insert\_one方法;选择集合people,操作语句collectionclient\:people\定义要插入的文档数据和
Wesley13 Wesley13
3年前
MySQL与Mongo简单的查询 1
首先在这里我就不说关系型数据库与非关系型数据库之间的区别了(百度上有很多)直接切入主题我想查询的内容是这样的:分数大于0且人名是bob或是jake的总分数 平均分数 最小分数 最大分数 计数举这个实例来试试用MySQL和mongodb分别写一个查询首先我们先做一些准备工作MySQL的数据库结构如下1CREATETABL
Stella981 Stella981
3年前
Centos7下安装和卸载Mongodb数据库的方法
导读MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据