共計(jì) 3244 個(gè)字符,預(yù)計(jì)需要花費(fèi) 9 分鐘才能閱讀完成。
這篇文章主要介紹了 mongo 中模糊查詢?cè)趺从茫哂幸欢ń梃b價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
以下是一個(gè) mongo 查詢的綜合應(yīng)用,即介紹一個(gè)生產(chǎn)中實(shí)際應(yīng)用的模糊查詢,當(dāng)然其實(shí)也很簡(jiǎn)單,主要用到 mongo 中的模糊查詢和 $or 查詢,以及并的關(guān)系,下面是一個(gè) mongo 中的一條記錄
{
_id : ffe6a068-9043-4334-97d2-75387340e655 ,
file_id : ffe6a068-9043-4334-97d2-75387340e655 ,
name : 中國(guó)正大 ,
update_time : NumberInt(1554975642),
create_time : NumberInt(1554975642),
content : 中國(guó)正大相關(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)行一鍵安裝,至于如何使用也很簡(jiǎn)單,可以自行百度或者訪問我的另一篇博客:pymono 的簡(jiǎn)單使用,下面附上用 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)換
感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“mongo 中模糊查詢?cè)趺从谩边@篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!