利用pymongo操作mongoDB数据库
利用pymongo操作mongoDB数据库 #连接数据库def get_db(): from pymongo import MongoClient client = MongoClient(localhost:27017) db = client.examples #examples here is the database name.it will be created if it does not exist. #如果 examples不
利用pymongo操作mongoDB数据库
#连接数据库 def get_db(): from pymongo import MongoClient client = MongoClient('localhost:27017') db = client.examples #'examples' here is the database name.it will be created if it does not exist. #如果 examples不存在,那么就会新建它 return db #插入操作 def add_city(db): db.cities.insert({'name':'Chicago'}) #inser 插入一个字典 #获取数据 def get_city(db): return db.cities.find_one()#从cities中返回任意一个数据 if __name__ == '__main__': db = get_db() add_city(db) print get_city(db)
上面只是操作mongoDB数据库的最简单的一个例子。
我们基于mongoDB的应用(APP),pymongo模块,与mongoDB数据库,三者之间是什么关系呢?
我觉得可以表示为: APP pymongomongoDB
其中:BSON 为Binary Json
有了这个概念后,你就会理解为什么mongoDB是字典家族。
所以在mongoDB的操作中一定要建立一切皆为字典的基本认识。
步入正题,先说一下Query操作 query = {'manuafacturer':'Porsche'}
projection = {'_id':0,'name':1}#显示为1,不显示为0 db.myautos.find(query,projection)#查找制造商为保时捷的数据,但是不显示'_id',显示'name' db.myautos.find(query,projection).count()#返回满足条件的数据的数量
在terminal下: $mongoimport -db dbname -c collectionname --file inputfile.json
比较操作符:
$gt $lt $lte $gte $ne 分别对应为:
大于(greater than) 小于(less than) 小于等于(less than equal) 大于等于(greater than equal) 不等于(not equal)
query = {'population':{'$gt':10000}} #人口大于10000 query = {'population':{'$gt':10000, '$lte':20000}} #人口大于10000小于等于20000 query = {'name':{'$gt':'X', '$lte':'Z'}}#name 头字母介于X Z之间 from datetime import datetime query = {'foundationDate':{'$gt':datetime(1840,1,1), '$lte':datetime(2049,10,1)}} #介于1840,1,1日和2049,10,1 的时间
query = {'governmentType':{'$exist':1}} #1表示存在 query = {'governmentType':{'$exist':0}} #0表示不存在
query = {'motto':{'$regex':'[Ff]riendship'}}
$in 与 $all
query = {'modelYears':{'$in':[1965,1967,1977,1987]}}#只要存在一个就可以 query = {'modelYears':{'$all':[1965,1967,1977,1987]}}#四个必须全部同时存在
如果数据结构为:
{'dimension':{'width':25, 'height':30, 'length':89} ........ }
Query 字典可以为:
query = {'dimension.width':25} city = db.cities.find(query) for ele in city: city['dimension'] = 66 #保存修改 db.cities.save(city)
update操作
db.cities.update({'name':'michael', 'country':'china'},#条件 {'$set':{'iso':1978}})#满足条件的条目中,有'iso'属性的,其值改为1978 db.cities.update({'name':'michael', 'country':'china'},#条件 {'$unset':{'iso':1978}}) #满足条件的条目中,有'iso'属性的,删除'iso'属性 #多个修改 db.cities.update({'name':'michael', 'country':'china'},#条件 {'$set':{'iso':1978}}, multi = True)
aggregate操作
我们考虑如下的数据结构:
{ "_id" : ObjectId("5304e2e3cc9e684aa98bef97"), "text" : "First week of school is over :P", "in_reply_to_status_id" : null, "retweet_count" : null, "contributors" : null, "created_at" : "Thu Sep 02 18:11:25 +0000 2010", "geo" : null, "source" : "web", "coordinates" : null, "in_reply_to_screen_name" : null, "truncated" : false, "entities" : { "user_mentions" : [ ], "urls" : [ ], "hashtags" : [ ] }, "retweeted" : false, "place" : null, "user" : { "friends_count" : 145, "profile_sidebar_fill_color" : "E5507E", "location" : "Ireland :)", "verified" : false, "follow_request_sent" : null, "favourites_count" : 1, "profile_sidebar_border_color" : "CC3366", "profile_image_url" : "http://a1.twimg.com/profile_images/1107778717/phpkHoxzmAM_normal.jpg", "geo_enabled" : false, "created_at" : "Sun May 03 19:51:04 +0000 2009", "description" : "", "time_zone" : null, "url" : null, "screen_name" : "Catherinemull", "notifications" : null, "profile_background_color" : "FF6699", "listed_count" : 77, "lang" : "en", "profile_background_image_url" : "http://a3.twimg.com/profile_background_images/138228501/149174881-8cd806890274b828ed56598091c84e71_4c6fd4d8-full.jpg", "statuses_count" : 2475, "following" : null, "profile_text_color" : "362720", "protected" : false, "show_all_inline_media" : false, "profile_background_tile" : true, "name" : "Catherine Mullane", "contributors_enabled" : false, "profile_link_color" : "B40B43", "followers_count" : 169, "id" : 37486277, "profile_use_background_image" : true, "utc_offset" : null }, "favorited" : false, "in_reply_to_user_id" : null, "id" : NumberLong("22819398300") }
$group 操作
group = {'$group':{'_id':'$user.screen_name','count':{'$sum':1}}} #group操作必须有个键是'_id'表示操作的对象,'$sum'表示求和操作 #上面这一行代码的意思是,统计各个'user.screen_name'的个数
$sort 操作,顾名思义,排序操作,其对某个键值进行升序或是降序操作
#接上段代码 sort = {'$sort:{'count':-1}} #按照'count'对应的值得降序排序
将group,sort整合到aggregate函数中,就能得到我们想要的结果
pipeline = [group,sort] result = db.tweets.aggregate(pipeline) #result 是一个字典。result['result'] 包含处理好的数据的列表 #整个操作就是,统计各个user.screen_name的数量,并倒序排列
上面仅仅是最简单的例子
下面我们继续讨论其他操作:
$match ,顾名思义,我更愿意叫他“过滤器”
好吧让我举个例子,我想找出数据库中谁的人气最旺!你给我个建议,怎么找到这个逗比?
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥好好想想¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
¥¥¥¥¥¥¥¥¥¥¥¥¥是国民老公,王思聪¥¥¥¥¥¥¥¥¥¥¥¥¥还是,臭脚,杨幂¥¥¥¥¥¥¥¥¥
¥¥¥¥¥¥¥¥¥是某个微博卖肉的小明星?¥¥¥¥¥¥¥还是传媒达人,谷大白话?¥¥¥¥¥¥¥¥¥¥¥¥
好吧,我只想到了个比值,用比值表示,是比值,不是逼值
比值 = 粉丝数/好友数
当然,关注数也还行,可我就是这么任性,像姜文大叔一样,怎么滴?
奥,你说,你要这样我不看了啦!
好!你不看就不看吧,小弟看了姜文大叔的电影,学了一个本事儿。
我悄悄告诉你:姜文的意思是:我拍电影不是给你看的,我是给自己看的。小弟不才,没钱拍电影,》》写博客不是给别人看的,是给自己看的。对!我在自言自语。另一个我在看博客。
扯回来$match ,不,扯回来找比值,看看我怎么找比值吧,不,是最大比值
match = {'$match':{'user.friends_count':{'$gt':0},'user.followers_count':{'$gt':0}}} #确保 好友数和粉丝数都是正数 project = {'$project':{'ratio':{'$divide':['$user.followers_count','$user.friends_count']}, 'screen_name':'$user.screen_name'}} #创建'ratio'和'screen_name'两个键值,其中,'ratio'利用了'$divide'除法,对两个变量进行除法操作,当然, #这个列表有先后顺序 #下面进行排序 sort = {'$sort':{'ratio':-1}} #降序排列 #选取第一位 limit = {'$limit':1} #$limit 限制选择结果的个数 pipeline = [match, project, sort, limit] result = db.tweets.aggregate(pipeline)
$unwind 操作, 举例如下:
假设有这样的字典结构:
{ 'id':'1', 'author':'jone', 'tags':['good','fun','good'] }
db.article.aggregate([{'$prject':{'author':1,'tags':1}},{'$unwind':'tags'}])
{'result':[{'_id':'XXXX','author':'jone','tags':'good'}, {'_id':'XXXX','author':'jone','tags':'fun'}, {'_id':'XXXX','author':'jone','tags':'good'}], 'ok':1}
原来数组的长度。
$group操作
我们考虑最开始的twitter数据,如果我要找到哪一个微博文本被转发的平均次数最多,该如何写我们的aggregate呢?
首先要找到推文的hashtag,这里补充一下,上文中的twitter数据中的
"entities" : { "user_mentions" : [ ], "urls" : [ ], "hashtags" : [ ]
而’retweet_count‘标明了被转发的次数,进行平均计算就可以了。
unwind = {'$unwind':'$entities.hashtags'}
group = {'$group':{'_id':'entities.hashtags.text','retweet_avg':{'$avg':'$retweet_avg'}}}
'entities.hashtags.text'
'$sum' '$first' '$last' '$max' '$min' 等
接着进行排序操作,这样所有操作就是如下:
unwind = {'$unwind':'$entities.hashtags'}
group = {'$group':{'_id':'$entities.hashtags.text','retweet_avg':{'$avg':'$retweet_avg'}}}
sort = {'$sort':{'retweet_avg':-1}}
limit = {'$limit':1}
pipeLine = [unwind,group,sort,limit]
db.article.aggregate(pipeLine)
$push, $addToSet
顾名思义,push和addToSet都是将元素组合到数组中,但是addToSet更加高级,Set是集合,所以addToSet形成的数组中没有重复元素。
push形成的数组中是可以有重复元素的。
这就是二者的不同之处。
好了,利用pymongo处理mongoDB是不是很简单呢?大家都这么说哒。
我也觉得不难啦。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

Navicat 만료 문제를 해결하는 방법은 다음과 같습니다: 라이센스 갱신, 자동 업데이트 비활성화, Navicat 고객 지원에 문의하세요.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

목차 Astar Dapp 스테이킹 원리 스테이킹 수익 잠재적 에어드랍 프로젝트 해체: AlgemNeurolancheHealThreeAstar Degens DAOVeryLongSwap 스테이킹 전략 및 운영 "AstarDapp 스테이킹"이 올해 초 V3 버전으로 업그레이드되었으며 스테이킹 수익에 많은 조정이 이루어졌습니다. 규칙. 현재 첫 번째 스테이킹 주기는 종료되었으며 두 번째 스테이킹 주기의 "투표" 하위 주기가 막 시작되었습니다. '추가 보상' 혜택을 받으려면 이 중요한 단계(6월 26일까지 지속 예정, 5일 미만 남았음)를 파악해야 합니다. 아스타 스테이킹 수익을 자세하게 분석해보겠습니다.

Golang의 데이터베이스 콜백 기능을 사용하면 다음을 달성할 수 있습니다. 지정된 데이터베이스 작업이 완료된 후 사용자 정의 코드를 실행합니다. 추가 코드를 작성하지 않고도 별도의 함수를 통해 사용자 정의 동작을 추가할 수 있습니다. 삽입, 업데이트, 삭제, 쿼리 작업에 콜백 함수를 사용할 수 있습니다. 콜백 함수를 사용하려면 sql.Exec, sql.QueryRow, sql.Query 함수를 사용해야 합니다.

Go 표준 라이브러리 데이터베이스/sql 패키지를 통해 MySQL, PostgreSQL 또는 SQLite와 같은 원격 데이터베이스에 연결할 수 있습니다. 데이터베이스 연결 정보가 포함된 연결 문자열을 생성합니다. sql.Open() 함수를 사용하여 데이터베이스 연결을 엽니다. SQL 쿼리 및 삽입 작업과 같은 데이터베이스 작업을 수행합니다. 리소스를 해제하기 위해 defer를 사용하여 데이터베이스 연결을 닫습니다.

Navicat을 사용하여 MongoDB에 연결하려면 다음을 수행해야 합니다: Navicat 설치 MongoDB 연결 생성: a. 연결 이름, 호스트 주소 및 포트를 입력합니다. b. 인증 정보를 입력합니다(필요한 경우). SSL 인증서를 추가합니다(필요한 경우). 연결 저장
