日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模糊查询mongodb_Python札记 -- MongoDB模糊查询

發(fā)布時間:2024/3/13 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模糊查询mongodb_Python札记 -- MongoDB模糊查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在使用MongoDB的時候,遇到了使用多個關鍵詞進行模糊查詢的場景。竹風使用的是mongoengine庫。

查了各種資料,最后總結出比較好用的方法。先上代碼,后面進行詳細說明。如下:

1 #!/usr/bin/env python

2 #coding:utf-8

3

4 importre5 importmongoengine6 from mongoengine import *

7

8 mongoengine.register_connection(‘default‘, ‘test‘, host=‘127.0.0.1‘)9

10 classTestData(Document):11 name =StringField()12 content =StringField()13

14 TestData.objects.get_or_create(name=‘天地玄黃‘,defaults={‘content‘:‘a(chǎn)bc123‘})15 TestData.objects.get_or_create(name=‘宇宙洪荒‘,defaults={‘content‘:‘ABC123‘})16 TestData.objects.get_or_create(name=‘天天向上‘,defaults={‘content‘:‘Abc123‘})17

18 defprint_arr(obj):19 printobj.name,obj.content20

21 deffuzzy_query_by_contains():22 print "\n###使用mongoengine的contains進行查詢"

23 print "#contains區(qū)分大小寫:"

24 test_data_list = TestData.objects(content__contains=‘a(chǎn)bc123‘)25 map(print_arr,test_data_list)26

27 print "#icontains不區(qū)分大小寫:"

28 test_data_list = TestData.objects(content__icontains=‘a(chǎn)bc123‘)29 map(print_arr,test_data_list)30

31 deffuzzy_query_by_Q():32 print "\n###使用Q來進行查詢"

33 test_data_list =TestData.objects(34 Q(name__icontains=u‘天地‘) | Q(name__icontains=u‘宇宙‘))35 map(print_arr,test_data_list)36

37 deffuzzy_query_by_pymongo():38 print "\n###使用raw queries,New in version 0.4"

39 print "#單個查詢條件"

40 search ={41 ‘__raw__‘:{42 ‘content‘:{‘$regex‘:‘A\S+\d+‘},43 },44 }45 test_data_list = TestData.objects(**search)46 map(print_arr,test_data_list)47

48 print "#多個查詢條件"

49 search ={50 ‘__raw__‘:{51 ‘name‘:{‘$in‘:[re.compile(u‘天天‘),re.compile(u‘宇宙‘)]},52 },53 }54 test_data_list = TestData.objects(**search)55 map(print_arr,test_data_list)56

57 if __name__ == ‘__main__‘:58 fuzzy_query_by_contains()59 fuzzy_query_by_Q()60 fuzzy_query_by_pymongo()

先討論一下fuzzy_query_by_contains方法,這里用的是mongoengine提供的contains操作。值得注意的是,contains區(qū)分大小寫,而icontains不區(qū)分大小寫。這種方式在針對一個關鍵詞進行模糊查詢的時候特別方便。

然后是fuzzy_query_by_Q方法,這里結合了contains和Q來進行組合查詢。當使用Q()來進行組合查詢時,必須使用位運算符(|和&),而不能使用or,and來進行邏輯運算。這種方式比較合適確定關鍵詞數(shù)目的情況。如果關鍵詞的數(shù)目是不定的,這種方式就略顯糾結了。

竹風在動態(tài)關鍵詞模糊查詢的問題也是糾結良久,差點就要對每個關鍵詞分別查詢,然后取交集湊結果了。后來在文檔中發(fā)現(xiàn),mongoengine有__raw__這個參數(shù),可以執(zhí)行PyMongo的查詢(version 0.4提供的新功能)。于是幾經(jīng)試驗,fuzzy_query_by_pymongo方法就出爐了。

PyMongo支持正則表達式,提供了兩種方法,一種是使用$regex,另一種是使用re.compile()。

在例子中,對單個關鍵詞進行模糊查詢,對應的代碼為:{‘$regex‘:‘A\S+\d+‘}

接著就是對多個關鍵詞進行查詢,對應的代碼為:{‘$in‘:[re.compile(u‘天天‘),re.compile(u‘宇宙‘)]}

對代碼進行一些修改,以便接受多個關鍵詞,代碼如下:

1 deffuzzy_query_by_pymongo():2 print "#多個查詢條件"

3 keyword = u‘天天 宇宙‘

4 search = {‘__raw__‘ : {‘name‘:{‘$in‘:map(re.compile,keyword.split())}}}5 test_data_list = TestData.objects(**search)6 map(print_arr,test_data_list)

順帶一提,例子中創(chuàng)建數(shù)據(jù)是用的get_or_create,會返回一個元組,第一個元素是創(chuàng)建or查詢的對象,第二個元素是是否創(chuàng)建成功。文檔中的推薦用法如下:

1 >>> a, created = User.objects.get_or_create(name=‘User A‘, defaults={‘a(chǎn)ge‘: 30})2 >>> b, created = User.objects.get_or_create(name=‘User A‘, defaults={‘a(chǎn)ge‘: 40})3 >>> a.name == b.name and a.age ==b.age4 True

最后是例子運行的結果,返回的結果順序可能略有不同,不必在意。

1 $ python mongodb_test.py2

3 ###使用mongoengine的contains進行查詢4 #contains區(qū)分大小寫:5 天地玄黃 abc1236 #icontains不區(qū)分大小寫:7 天地玄黃 abc1238 宇宙洪荒 ABC1239 天天向上 Abc12310

11 ###使用Q來進行查詢12 天地玄黃 abc12313 宇宙洪荒 ABC12314

15 ###使用raw queries,New in version 0.4

16 #單個查詢條件17 宇宙洪荒 ABC12318 天天向上 Abc12319 #多個查詢條件20 宇宙洪荒 ABC12321 天天向上 Abc123

原文:http://www.cnblogs.com/PandaBamboo/p/3878237.html

總結

以上是生活随笔為你收集整理的python模糊查询mongodb_Python札记 -- MongoDB模糊查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩三级在线 | a级小视频 | 亚洲啪啪免费视频 | 日韩免费网 | www色视频 | 精品视频久久久久久久 | 国产精品污网站 | 国产免费二区 | 久久免费视频网站 | 黄色三级a | 激情内射亚洲一区二区三区爱妻 | 欧美cccc极品丰满hd | 婷婷俺来也| 亚洲国产丝袜 | 中文字幕av亚洲精品一部二部 | 亚洲女同女同女同女同女同69 | 一级毛片aa| 欧亚一区二区 | 少妇一级淫免费播放 | 91.久久| jizz亚洲女人高潮大叫 | 国产真人无码作爱视频免费 | 男人天堂2024 | 特级西西人体444www高清大胆 | 色汉综合 | 国产专区视频 | 久久1024| 成人欧美一区二区三区 | 美女搞黄在线观看 | 日韩欧美不卡视频 | 日本一区二区免费在线观看 | 在线不卡日本 | 国产精品精品软件视频 | 日本在线一级片 | 黄色小视频在线免费观看 | 久久久久久蜜桃一区二区 | 成人免费网站视频 | 丰满女人又爽又紧又丰满 | 精品久久综合 | 亚洲国产一区二区三区 | 日本精品一区视频 | 国产精品国产三级国产aⅴ中文 | 色天堂视频 | 久草综合在线 | 龚玥菲三级露全乳视频 | 久久国产乱子伦免费精品 | 在线观看av网页 | 鲁一鲁色一色 | 99久久久精品免费观看国产 | 日本精品在线观看视频 | 久久一久久 | 伦伦影院午夜理论片 | 爱爱小视频网站 | 黄av在线| 中国一级免费毛片 | 极品人妻videosss人妻 | 97视频总站 | 国产精品美女久久久网av | 最新中文字幕在线观看视频 | 足疗店女技师按摩毛片 | 男人的天堂网av | 国产精品对白刺激久久久 | 日韩一区二区免费看 | 欧美福利片在线观看 | 亚洲国产黄色av | 米奇7777狠狠狠狠视频 | 国产伦精品一区二区三区视频我 | 国产经典三级 | 中文字幕激情 | 国产剧情在线 | 欧美国产一二三区 | 成人av网址在线观看 | 中国字幕一色哟哟 | 理论片琪琪午夜电影 | 国产精品国产三级国产播12软件 | 亚洲亚裔videos黑人hd | 8x8x最新网址 | 国产高清www| 快射视频在线观看 | 两性午夜免费视频 | 国产精品1234区 | 秋霞国产午夜精品免费视频 | 老牛影视av牛牛影视av | 免费在线中文字幕 | 亚洲涩视频 | 欧美色久| 欧美性受xxxx狂喷水 | 轮番上阵免费观看在线电影 | 国产精品3 | 久久久人体 | 97人妻一区二区精品免费视频 | 国产乱人乱精一区二视频国产精品 | 欧美11p | 十八岁世界在线观看高清免费韩剧 | 91国在线视频 | 日韩人妻无码精品久久免费 | 国产乱了高清露脸对白 | 好吊色视频一区二区 | 豆花在线视频 |