前言
以下是一個(gè)mongo查詢的綜合應(yīng)用,即介紹一個(gè)生產(chǎn)中實(shí)際應(yīng)用的模糊查詢,當(dāng)然其實(shí)也很簡單,主要用到mongo中的模糊查詢和$or查詢,以及并的關(guān)系,下面是一個(gè)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)
}
對(duì)上面一條記錄或者更多條記錄我們生產(chǎn)中的需求是:查詢出集合中(mongo中的集合即是mysql中的表),name或content中包含"正大"二字的記錄(關(guān)鍵詞即是用戶隨機(jī)輸入的,其實(shí)是一個(gè)變量),并且時(shí)間戳的值大于某一個(gè)開始時(shí)間和某一個(gè)結(jié)束時(shí)間(這個(gè)也是用戶在前端進(jìn)行選擇,然后我們拿到前端的請(qǐng)求來進(jìn)行查詢的),并且文件的類型即info_type字段的值為"00",“00”代表的是word也是前端用戶選擇后我們獲取的條件之一,當(dāng)然還有其他條件想進(jìn)行嘗試可以自由發(fā)揮
下面就是使用mongo語句進(jìn)行實(shí)現(xiàn)的上面的需求:
db.getCollection("subscribe_test").find({$or:[{"name":{"$regex":"正大"}},{"content":{"$regex":"正大"}}],"update_time":{$gte:1,$lte:2000000000},info_type:"00"})
對(duì)于查詢我們有的時(shí)候會(huì)選擇在程序中進(jìn)行,有的小伙伴會(huì)問上面的mongo語句怎么在編程語言中進(jìn)行實(shí)現(xiàn),下面是用python語言中進(jìn)行實(shí)現(xiàn)的,我們會(huì)引用python中操作mongo的一個(gè)模塊即pymongo模塊可以使用pip install pymongo
在控制臺(tái)或cmd中進(jìn)行一鍵安裝,至于如何使用也很簡單,可以自行百度或者訪問我的另一篇博客:pymono的簡單使用,下面附上用python代碼實(shí)現(xiàn)上面需求的業(yè)務(wù)代碼:
import pymongo
import re
# 創(chuàng)建數(shù)據(jù)庫連接
client = pymongo.MongoClient(host='127.0.0.1', port=8014) #填寫自己本機(jī)數(shù)據(jù)庫的ip和port或者遠(yuǎn)程服務(wù)器數(shù)據(jù)庫的ip和port
# 指定數(shù)據(jù)庫db1,沒有則創(chuàng)建數(shù)據(jù)庫db1
db = client.dataretrieve
#指定數(shù)據(jù)庫中指定的表
collection=db.subscribe_test
"""1、對(duì)表中的數(shù)據(jù)進(jìn)行查詢"""
"""
db.collection.find(query, projection)
query :可選,使用查詢操作符指定查詢條件
projection :可選,使用投影操作符指定返回的鍵。查詢時(shí)返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認(rèn)省略)。
"""
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)中實(shí)際的開發(fā)代碼,只供參考,只是把上面的一些常量,換成了從前端請(qǐng)求的數(shù)據(jù):
def person_handler(req_params, page_size, search_offset):
"""
去mongo中查詢個(gè)人數(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用代碼怎么實(shí)現(xiàn)呢?那么如果你會(huì)寫mysql來實(shí)現(xiàn)上面的需求的話本博主可以推薦你使用mongo的一款可視化工具Studio 3T來將mysql語句轉(zhuǎn)換成mongo語句,python語句,java語句等
mysql語句也類似mongo語句有一個(gè)控制臺(tái)可以來進(jìn)行書寫mysql語句,然后進(jìn)行查詢之后將結(jié)果進(jìn)行轉(zhuǎn)換
總結(jié)
以上就是關(guān)于mongo模糊查詢的簡單使用,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
您可能感興趣的文章:- Java操作MongoDB模糊查詢和分頁查詢
- Java操作mongodb的模糊查詢和精確查詢
- 在php7中MongoDB實(shí)現(xiàn)模糊查詢的方法詳解
- Node.js對(duì)MongoDB數(shù)據(jù)庫實(shí)現(xiàn)模糊查詢的方法
- Python操作mongodb數(shù)據(jù)庫進(jìn)行模糊查詢操作示例
- Java操作MongoDB插入數(shù)據(jù)進(jìn)行模糊查詢與in查詢功能
- Golang Mongodb模糊查詢的使用示例