mongo中模糊查詢的綜合應用
前言
以下是一個mongo查詢的綜合應用,即介紹一個生產(chǎn)中實際應用的模糊查詢,當然其實也很簡單,主要用到mongo中的模糊查詢和$or查詢,以及并的關(guān)系,下面是一個mongo中的一條記錄
{ "_id" : "ffe6a068-9043-4334-97d2-75387340e655", "file_id" : "ffe6a068-9043-4334-97d2-75387340e655", "name" : "中國正大", "update_time" : NumberInt(1554975642), "create_time" : NumberInt(1554975642), "content" : "中國正大相關(guān)信息", "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) }
對上面一條記錄或者更多條記錄我們生產(chǎn)中的需求是:查詢出集合中(mongo中的集合即是mysql中的表),name或content中包含"正大"二字的記錄(關(guān)鍵詞即是用戶隨機輸入的,其實是一個變量),并且時間戳的值大于某一個開始時間和某一個結(jié)束時間(這個也是用戶在前端進行選擇,然后我們拿到前端的請求來進行查詢的),并且文件的類型即info_type字段的值為"00",“00”代表的是word也是前端用戶選擇后我們獲取的條件之一,當然還有其他條件想進行嘗試可以自由發(fā)揮
下面就是使用mongo語句進行實現(xiàn)的上面的需求:
db.getCollection("subscribe_test").find({$or:[{"name":{"$regex":"正大"}},{"content":{"$regex":"正大"}}],"update_time":{$gte:1,$lte:2000000000},info_type:"00"})
對于查詢我們有的時候會選擇在程序中進行,有的小伙伴會問上面的mongo語句怎么在編程語言中進行實現(xiàn),下面是用python語言中進行實現(xiàn)的,我們會引用python中操作mongo的一個模塊即pymongo模塊可以使用pip install pymongo
在控制臺或cmd中進行一鍵安裝,至于如何使用也很簡單,可以自行百度或者訪問我的另一篇博客:pymono的簡單使用,下面附上用python代碼實現(xiàn)上面需求的業(yè)務代碼:
import pymongo import re # 創(chuàng)建數(shù)據(jù)庫連接 client = pymongo.MongoClient(host='127.0.0.1', port=8014) #填寫自己本機數(shù)據(jù)庫的ip和port或者遠程服務器數(shù)據(jù)庫的ip和port # 指定數(shù)據(jù)庫db1,沒有則創(chuàng)建數(shù)據(jù)庫db1 db = client.dataretrieve #指定數(shù)據(jù)庫中指定的表 collection=db.subscribe_test """1、對表中的數(shù)據(jù)進行查詢""" """ db.collection.find(query, projection) query :可選,使用查詢操作符指定查詢條件 projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認省略)。 """ 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"])
下面是生產(chǎn)中實際的開發(fā)代碼,只供參考,只是把上面的一些常量,換成了從前端請求的數(shù)據(jù):
def person_handler(req_params, page_size, search_offset): """ 去mongo中查詢個人數(shù)據(jù) :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("查詢結(jié)果", results) return results, additions, count
如果有小伙伴說我用的不是python語言譬如java用代碼怎么實現(xiàn)呢?那么如果你會寫mysql來實現(xiàn)上面的需求的話本博主可以推薦你使用mongo的一款可視化工具Studio 3T來將mysql語句轉(zhuǎn)換成mongo語句,python語句,java語句等
mysql語句也類似mongo語句有一個控制臺可以來進行書寫mysql語句,然后進行查詢之后將結(jié)果進行轉(zhuǎn)換
總結(jié)
以上就是關(guān)于mongo模糊查詢的簡單使用,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關(guān)文章
MongoDB 3.4 安裝以 Windows 服務方式運行的詳細步驟
這篇文章主要介紹了MongoDB 3.4 安裝以 Windows 服務方式運行的詳細步驟,需要的朋友可以參考下2017-09-09MongoDB中的常用操作$push、$pushAll和$pull示例詳解
MongoDB從2.2版本開始支持$push操作符,$push是用于在數(shù)組中添加一個元素的更新操作符,它將指定的值追加到數(shù)組的末尾,本文給大家介紹MongoDB的常用操作$push、$pushAll和$pull,感興趣的朋友一起看看吧2023-12-12mongodb監(jiān)控工具mongostat的使用及命令詳解
mongostat是mongodb自帶的狀態(tài)檢測工具,在命令行下使用,會間隔固定時間獲取mongodb的當前運行狀態(tài),并輸出,本文講述了mongodb監(jiān)控工具mongostat的使用及命令詳解2018-03-03python實現(xiàn)爬蟲數(shù)據(jù)存到 MongoDB
本文給大家分享的是使用python實現(xiàn)將爬蟲爬到的數(shù)據(jù)存儲到mongoDB數(shù)據(jù)庫中的實例代碼,有需要的小伙伴可以參考下2016-09-09