mongo中的模糊查询

以下是一个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模糊查询的简单使用,希望对你有所帮助,原创不易,转载请说明出处,谢谢!!!!

原文地址:https://www.cnblogs.com/sui776265233/p/10694958.html

时间: 2024-10-25 22:07:44

mongo中的模糊查询的相关文章

mysql中的模糊查询

转载自:http://www.letuknowit.com/archives/90/ MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它们是同义词). 第一种是标准的SQL模式匹配.它有2种通配符:“_”和“%”.“_”匹配任意单个字符,而“%”匹配任意多个字符(包括0个).举例如下: SELECT * FROM table_name WHERE column_name LIKE ‘m%’; #查询

09-JS中table模糊查询

JS中table模糊查询 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <input type="text" name="" id="txt1" value="&q

【Django】Django中的模糊查询以及Q对象的简单使用

Django中的模糊查询: 需要做一个查找的功能,所以需要使用到模糊查询. 使用方法是:字段名加上双下划线跟上contains或者icontains,icontains和contains表示是否区分大小写. 实测icontains为不区分大小写,contains为区分大小写. from djangp.db.models import Q def select_seller(request,keyword): seller_info= Seller.objects.filter(Q(usernam

Mybatis中mapper.xml中的模糊查询

Mybatis中mapper.xml中的模糊查询 <!-- 方法一: 直接使用 % 拼接字符串 注意:此处不能写成 "%#{name}%" ,#{name}就成了字符串的一部分, 会发生这样一个异常: The error occurred while setting parameters, 应该写成: "%"#{name}"%",即#{name}是一个整体,前后加上% --> <if test="name != nul

Mybatis中的模糊查询

1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 我就是按照此方法实现了功能. 其实还有种方法:像这样写也行: 2. 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE '%${text}%'; 这个我试过之后,发现并没有实现模糊查询的功能,而且目前也不知道哪里出错了,如果有人知道请指教. 3. 程序中拼

SQL中常用模糊查询的四种匹配模式

执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为"张三","张猫三"."三脚猫","唐三藏&

mybaties中,模糊查询的几种写法

模糊查询: 工作中用到,写三种用法吧,第四种为大小写匹配查询 1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 2. 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE '%${text}%'; 3. 程序中拼接    Java // or String searchText = "%" + t

SQL中常用模糊查询的四种匹配模式&amp;&amp;正则表达式

执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来.另外,如果须要找出u_name中

mybatis中llike模糊查询中#和$的使用,以及bind标签的使用

关于#{}和${}就是jdbc中的预编译和非预编译 1.表达式: name like"%"#{name}"%" 打印的日志 ==>  Preparing: select * from user WHERE name like"%"?"%" ==>Parameters: 傻(String), 1(Integer) 能够查询出来,没有问题,这是使用了占位符来占位,写成SQL就是: name like "%&q