python-mongodb基本操作都在這了(轉(zhuǎn))

數(shù)據(jù)庫(kù)

? ? 增

? ? ? ? use db1 #有則切換,無(wú)則新增 ? ?

? ? 查

? ? ? ? show dbs #查看所有db#當(dāng)前 ? ?

? ? 刪

? ? ? ? db.dropDatabase()

集合:

? ? 增:

? ? ? ? db.user

? ? ? ? db.user.info

? ? ? ? db.user.auth

? ? 查

? ? ? ? show collections

? ? ? ? show tables

? ? 刪

? ? ? ? db.user.info.drop()

文檔:

? ? 增

? ? ? ? db.user.insert({"_id":1,"name":"egon"})

? ? ? ? user0={

? ? ? ? ? ? "name":"egon",

? ? ? ? ? ? "age":10,

? ? ? ? ? ? 'hobbies':['music','read','dancing'],

? ? ? ? ? ? 'addr':{

? ? ? ? ? ? ? ? 'country':'China',

? ? ? ? ? ? ? ? 'city':'BJ'? ? ? ? ? ? }

? ? ? ? }

? ? ? ? db.user.insert(user0)

? ? ? ? db.user.insertMany([user1,user2,user3,user4,user5])

? ? ? ? db.t1.insert({"_id":1,"a":1,"b":2,"c":3})

? ? ? ? #有相同的_id則覆蓋柜某,無(wú)相同的_id則新增,必須指定_iddb.t1.save({"_id":1,"z":6})

? ? ? ? db.t1.save({"_id":2,"z":6})

? ? ? ? db.t1.save({"z":6})

????????save與insert的區(qū)別:

????????若新增的數(shù)據(jù)中存在主鍵 人芽,insert() 會(huì)提示錯(cuò)誤裆熙,而save() 則更改原來(lái)的內(nèi)容為新內(nèi)容枫攀。

????????如:

????????????已存在數(shù)據(jù):? {_id : 1, " name " : " n1 " }必指,再次進(jìn)行插入操作時(shí)囊咏,

????????????insert({_id : 1, " name " : " n2 " })??? 會(huì)報(bào)主鍵重復(fù)的錯(cuò)誤提示

????????????save({ _id : 1, " name " : " n2 " })???? 會(huì)把 n1 修改為? n2? 。

????????相同點(diǎn):

????????????若新增的數(shù)據(jù)中沒(méi)有主鍵時(shí)塔橡,會(huì)增加一條記錄梅割。

????????????已存在數(shù)據(jù):? { _id : 1, " name " : " n1 " },再次進(jìn)行插入操作時(shí)葛家,

????????????insert({ " name " : " n2 " })??? 插入的數(shù)據(jù)因?yàn)闆](méi)有主鍵户辞,所以會(huì)增加一條數(shù)據(jù)

????????????save({? " name " : " n2 " })?? 增加一條數(shù)據(jù)。 ??

查 ? ? ? ?

????比較運(yùn)算:=癞谒,!=,>,<,>=,<=#1底燎、select * from db1.user where id = 3db.user.find({"_id":3})

? ? ? ? #2、select * from db1.user where id != 3db.user.find({"_id":{"$ne":3}})

? ? ? ? #3弹砚、select * from db1.user where id > 3db.user.find({"_id":{"$gt":3}})

? ? ? ? #4双仍、select * from db1.user where age < 3db.user.find({"age":{"$lt":3}})

? ? ? ? #5、select * from db1.user where id >= 3db.user.find({"_id":{"$gte":3}})

? ? ? ? #6迅栅、select * from db1.user where id <= 3db.user.find({"_id":{"$lte":3}})

? ? ? ? #邏輯運(yùn)算:$and,$or,$not#1 select * from db1.user where id >=3 and id <=4;db.user.find({"_id":{"$gte":3,"$lte":4}})

? ? ? ? #2 select * from db1.user where id >=3 and id <=4 and age >=40;? ? ? ? db.user.find({

? ? ? ? ? ? "_id":{"$gte":3,"$lte":4},

? ? ? ? ? ? "age":{"$gte":40}

? ? ? ? })

? ? ? ? db.user.find({"$and":[

? ? ? ? {"_id":{"$gte":3,"$lte":4}},

? ? ? ? {"age":{"$gte":40}}

? ? ? ? ]})

? ? ? ? #3 select * from db1.user where id >=0 and id <=1 or id >=4 or name = "yuanhao";db.user.find({"$or":[

? ? ? ? {"_id":{"$lte":1,"$gte":0}},

? ? ? ? {"_id":{"$gte":4}},

? ? ? ? {"name":"yuanhao"}

? ? ? ? ]})

? ? ? ? #4 select * from db1.user where id % 2 = 1;db.user.find({"_id":{"$mod":[2,1]}})

? ? ? ? db.user.find({

? ? ? ? ? ? "_id":{"$not":{"$mod":[2,1]}}

? ? ? ? })

? ? ? ? #成員運(yùn)算:$in,$nindb.user.find({"name":{"$in":["alex","egon"]}})

? ? ? ? db.user.find({"name":{"$nin":["alex","egon"]}})

? ? ? ? #正則匹配select *fromdb1.user where name regexp"^jin.*?(g|n)$";

? ? ? ? db.user.find({

? ? ? ? ? ? "name":/^jin.*?(g|n)$/i

? ? ? ? })

? ? ? ? #查看指定字段select name,agefromdb1.user where name regexp"^jin.*?(g|n)$";

? ? ? ? db.user.find({

? ? ? ? ? ? "name":/^jin.*?(g|n)$/i

? ? ? ? },

? ? ? ? {

? ? ? ? ? ? "_id":0,

? ? ? ? ? ? "name":1,

? ? ? ? ? ? "age":1? ? ? ? }

? ? ? ? )

? ? ? ? #查詢數(shù)組相關(guān) ? ? ??

?????????db.user.find({

? ? ? ? ? ? "hobbies":"dancing"? ? ? ? })

? ? ? ? db.user.find({

? ? ? ? ? ? "hobbies":{"$all":["dancing","tea"]}

? ? ? ? })

? ? ? ? db.user.find({

? ? ? ? ? ? "hobbies.2":"dancing"? ? ? ? })

? ? ? ? db.user.find(

? ? ? ? {},

? ? ? ? {

? ? ? ? ? ? "_id":0,

? ? ? ? ? ? "name":0,

? ? ? ? ? ? "age":0,

? ? ? ? ? ? "addr":0,

? ? ? ? ? ? "hobbies":{"$slice":[1,2]},

? ? ? ? }

? ? ? ? )

? ? ? ? db.user.find(

? ? ? ? {},

? ? ? ? {

? ? ? ? ? ? "_id":0,

? ? ? ? ? ? "name":0,

? ? ? ? ? ? "age":0,

? ? ? ? ? ? "addr":0,

? ? ? ? ? ? "hobbies":{"$slice":2},

? ? ? ? }

? ? ? ? )

? ? ? ? db.user.find(

? ? ? ? {

? ? ? ? ? ? "addr.country":"China"? ? ? ? }

? ? ? ? )

? ? ? ? db.user.find().sort({"_id":1,"age":-1})

? ? ? ? db.user.find().limit(2).skip(0)

? ? ? ? db.user.find().limit(2).skip(2)

? ? ? ? db.user.find().limit(2).skip(4)

? ? ? ? db.user.find().distinct()


? ? 改

? ? ? ? 一 語(yǔ)法:

? ? ? ? ? ? db.table.update(

? ? ? ? ? ? 條件,

? ? ? ? ? ? 修改字段,

? ? ? ? ? ? 其他參數(shù)

? ? ? ? ? ? )

? ? ? ? ? ? update db1.t1 set id=10 where name="egon";

? ? ? ? ? ? db.table.update(

? ? ? ? ? ? {},

? ? ? ? ? ? {"age":11},

? ? ? ? ? ? {

? ? ? ? ? ? ? ? "multi":true,

? ? ? ? ? ? ? ? "upsert":true? ? ? ? ? ? }? ? ? ? ? ? )

1殊校、update db1.user set age=23,name="武大郎"where name="wupeiqi";

? ? ? ? ? ? #覆蓋式 ? ? ? ? ? ?

????????????db.user.update(

? ? ? ? ? ? ? ? {"name":"wupeiqi"},

? ? ? ? ? ? ? ? {"age":23,"name":"武大郎"}

? ? ? ? ? ? )

? ? ? ? ? ? #局部修改:$set ? ? ? ? ? ?

????????????db.user.update(

? ? ? ? ? ? ? ? {"name":"alex"},

? ? ? ? ? ? ? ? {"$set":{"age":73,"name":"潘金蓮-alex"}}

? ? ? ? ? ? )

? ? ? ? ? ? #改多條 ? ? ? ? ? ?

????????????db.user.update(

? ? ? ? ? ? ? ? {"_id":{"$gte":1,"$lte":2}},

? ? ? ? ? ? ? ? {"$set":{"age":53,}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? #有則修改,無(wú)則添加 ? ? ? ? ? ?

????????????db.user.update(

? ? ? ? ? ? ? ? {"name":"EGON"},

? ? ? ? ? ? ? ? {"$set":{"name":"EGON","age":28,}},

? ? ? ? ? ? ? ? {"multi":true,"upsert":true}

? ? ? ? ? ? )

? ? ? ? ? ? #修改嵌套文檔 ? ? ? ? ??

?????????????db.user.update(

? ? ? ? ? ? ? ? {"name":"潘金蓮-alex"},

? ? ? ? ? ? ? ? {"$set":{"addr.country":"Japan"}}

? ? ? ? ? ? )

? ? ? ? ? ? #修改數(shù)組 ? ? ? ? ? ?

????????????db.user.update(

? ? ? ? ? ? ? ? {"name":"潘金蓮-alex"},

? ? ? ? ? ? ? ? {"$set":{"hobbies.1":"Piao"}}

? ? ? ? ? ? )

? ? ? ? ? ? #刪除字段 ? ? ? ? ??

?????????????db.user.update(

? ? ? ? ? ? ? ? {"name":"潘金蓮-alex"},

? ? ? ? ? ? ? ? {"$unset":{"hobbies":""}}

? ? ? ? ? ? )

? ? ? ? ? ? 2读存、$inc

? ? ? ? ? ? db.user.update(

? ? ? ? ? ? ? ? {},

? ? ? ? ? ? ? ? {"$inc":{"age":1}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? db.user.update(

? ? ? ? ? ? ? ? {},

? ? ? ? ? ? ? ? {"$inc":{"age":-10}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? 3为流、$push, $pop? $pull

? ? ? ? ? ? db.user.update(

? ? ? ? ? ? ? ? {"name":"yuanhao"},

? ? ? ? ? ? ? ? {"$push":{"hobbies":"tangtou"}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? db.user.update(

? ? ? ? ? ? ? ? {"name":"yuanhao"},

? ? ? ? ? ? ? ? {"$push":{"hobbies":{"$each":["紋身","抽煙"]}}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? #從頭刪-1,從尾刪1 ? ? ? ? ? ?

????????????db.user.update(

? ? ? ? ? ? ? ? {"name":"yuanhao"},

? ? ? ? ? ? ? ? {"$pop":{"hobbies":-1}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? db.user.update(

? ? ? ? ? ? ? ? {"name":"yuanhao"},

? ? ? ? ? ? ? ? {"$pop":{"hobbies":1}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? #按條件刪 ? ? ? ? ? ?

? ? ? ? ? ? db.user.update(

? ? ? ? ? ? ? ? {"name":"yuanhao"},

? ? ? ? ? ? ? ? {"$pull":{"hobbies":"紋身"}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? ? ? ? ? #3让簿、$addToSetdb.t3.insert({"urls":[]})

? ? ? ? ? ? db.t3.update(

? ? ? ? ? ? ? ? {},

? ? ? ? ? ? ? ? {"$addToSet":{"urls":{"$each":[

? ? ? ? ? ? ? ? ? ? "http://www.baidu.com",

? ? ? ? ? ? ? ? ? ? "http://www.baidu.com",

? ? ? ? ? ? ? ? ? ? "http://www.baidu.com",

? ? ? ? ? ? ? ? ? ? "http://www.baidu.com",

? ? ? ? ? ? ? ? ? ? "http://www.baidu.com"? ? ? ? ? ? ? ? ]}}},

? ? ? ? ? ? ? ? {"multi":true}

? ? ? ? ? ? )

? ? 刪

? ? ? ? db.user.deleteOne({"_id":{"$gte":3}})

? ? ? ? db.user.deleteMany({"_id":{"$gte":3}})

? ? ? ? db.user.deleteMany({})


? ? 聚合

? ? ? ? 一:$match

? ? ? ? ? ? 例:

? ? ? ? ? ? ? ? select post fromdb1.emp where age > 20 group by post having avg(salary) > 10000;

??????????????? #$match#1敬察、select * from db1.emp where age > 20db.emp.aggregate({"$match":{"age":{"$gt":20}}})

????????????????#$group#2、select post from db1.emp where age > 20 group by post; ? ? ? ? ? ?

????????????db.emp.aggregate(

? ? ? ? ? ? ? ? {"$match":{"age":{"$gt":20}}},

? ? ? ? ? ? ? ? {"$group":{"_id":"$post"}} ? ? ? ? ? ?

????????????)

? ? ? ? ? ? #3尔当、select post,avg(salary) as avg_salary from db1.emp where age > 20 group by post; ? ? ? ? ? ?

????????????db.emp.aggregate(

? ? ? ? ? ? ? ? {"$match":{"age":{"$gt":20}}},

? ? ? ? ? ? ? ? {"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}}

? ? ? ? ? ? )

? ? ? ? ? ? #select post from db1.emp where age > 20 group by post having avg(salary) > 10000; ? ? ? ? ? ?

????????????db.emp.aggregate(

? ? ? ? ? ? ? ? {"$match":{"age":{"$gt":20}}},{"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}}, ? ? ? ?

????????????????{"$match":????{"avg_salary":{"$gt":10000}}}? ? ? ? ? ? )? ? ? ? 二: 投射

????????????{

????????????"$project":{"要保留的字段名":1,"要去掉的字段名":0,"新增的字段名":"表達(dá)式"}}

? ? ? ? ? ? 例1:

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$project":{"_id":0,"name":1,"post":1,"annual_salary":{"$multiply":[12,"$salary"]}}},

? ? ? ? ? ? ? ? {"$group":{"_id":"$post","平均年薪":{"$avg":"$annual_salary"}}},

? ? ? ? ? ? ? ? {"$match":{"平均年薪":{"$gt":1000000}}},

? ? ? ? ? ? ? ? {"$project":{"部門名":"$_id","平均年薪":1,"_id":0}}

? ? ? ? ? ? )

? ? ? ? ? ? 例2:

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$project":{"_id":0,"name":1,"hire_period":{"$subtract":[new Date(),"$hire_date"]}}}

? ? ? ? ? ? )

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$project":{"_id":0,"name":1,"hire_year":{"$year":"$hire_date"}}}

? ? ? ? ? ? )

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$project":{"_id":0,"name":1,"hire_period":{"$subtract":[{"$year":new Date()},{"$year":"$hire_date"}]}}}

? ? ? ? ? ? )

? ? ? ? ? ? 例3:

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$project":{"_id":0,"new_name":{"$toUpper":"$name"},}}

? ? ? ? ? ? )

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$match":{"name":{"$ne":"egon"}}},

? ? ? ? ? ? ? ? {"$project":{"_id":0,"new_name":{"$concat":["$name","_SB"]},}}

? ? ? ? ? ? )

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$match":{"name":{"$ne":"egon"}}},

? ? ? ? ? ? ? ? {"$project":{"_id":0,"new_name":{"$substr":["$name",0,3]},}}

? ? ? ? ? ? )

? ? ? ? 三:{"$group":{"_id":分組字段,"新的字段名":聚合操作符}}

? ? ? ? ? ? #select post,max,min,sum,avg,count,group_concat from db1.emp group by post; ? ? ? ? ? ?

????????????db.emp.aggregate(

? ? ? ? ? ? ? ? {"$group":{

? ? ? ? ? ? ? ? ? ? "_id":"$post",

? ? ? ? ? ? ? ? ? ? "max_age":{"$max":"$age"},

? ? ? ? ? ? ? ? ? ? "min_id":{"$min":"$_id"},

? ? ? ? ? ? ? ? ? ? "avg_salary":{"$avg":"$salary"},

? ? ? ? ? ? ? ? ? ? "sum_salary":{"$sum":"$salary"},

? ? ? ? ? ? ? ? ? ? "count":{"$sum":1},

? ? ? ? ? ? ? ? ? ? "names":{"$push":"$name"}

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? )

? ? ? ? 四:排序:$sort莲祸、限制:$limit、跳過(guò):$skip

? ? ? ? ? ? db.emp.aggregate(

? ? ? ? ? ? ? ? {"$match":{"name":{"$ne":"egon"}}},

? ? ? ? ? ? ? ? {"$project":{"_id":1,"new_name":{"$substr":["$name",0,3]},"age":1}},

? ? ? ? ? ? ? ? {"$sort":{"age":1,"_id":-1}},

? ? ? ? ? ? ? ? {"$skip":5},

? ? ? ? ? ? ? ? {"$limit":5}

? ? ? ? ? ? )

? ? ? ? # 補(bǔ)充db.emp.aggregate({"$sample":{"size":3}})#隨機(jī)選取3個(gè)文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末椭迎,一起剝皮案震驚了整個(gè)濱河市锐帜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畜号,老刑警劉巖缴阎,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異简软,居然都是意外死亡蛮拔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門痹升,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)建炫,“玉大人,你說(shuō)我怎么就攤上這事疼蛾「氐” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵察郁,是天一觀的道長(zhǎng)衍慎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)绳锅,這世上最難降的妖魔是什么西饵? 我笑而不...
    開(kāi)封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮鳞芙,結(jié)果婚禮上眷柔,老公的妹妹穿的比我還像新娘。我一直安慰自己原朝,他們只是感情好驯嘱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著喳坠,像睡著了一般鞠评。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壕鹉,一...
    開(kāi)封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天剃幌,我揣著相機(jī)與錄音聋涨,去河邊找鬼。 笑死负乡,一個(gè)胖子當(dāng)著我的面吹牛牍白,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抖棘,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼茂腥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了切省?” 一聲冷哼從身側(cè)響起最岗,我...
    開(kāi)封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朝捆,沒(méi)想到半個(gè)月后般渡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡右蹦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年诊杆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片何陆。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晨汹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贷盲,到底是詐尸還是另有隱情淘这,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布巩剖,位于F島的核電站铝穷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏佳魔。R本人自食惡果不足惜曙聂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞠鲜。 院中可真熱鬧宁脊,春花似錦、人聲如沸贤姆。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霞捡。三九已至坐漏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赊琳。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工街夭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慨畸。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓莱坎,卻偏偏與公主長(zhǎng)得像衣式,于是被迫代替她去往敵國(guó)和親寸士。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容