python-mongodb基本操作都在这了(转)

数据库

    增

        use db1 #有则切换,无则新增    

    查

        show dbs #查看所有db#当前    

    删

        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则覆盖,无相同的_id则新增,必须指定_iddb.t1.save({"_id":1,"z":6})

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

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

        save与insert的区别:

        若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改原来的内容为新内容。

        如:

            已存在数据:  {_id : 1, " name " : " n1 " },再次进行插入操作时,

            insert({_id : 1, " name " : " n2 " })    会报主键重复的错误提示

            save({ _id : 1, " name " : " n2 " })     会把 n1 修改为  n2  。

        相同点:

            若新增的数据中没有主键时,会增加一条记录。

            已存在数据:  { _id : 1, " name " : " n1 " },再次进行插入操作时,

            insert({ " name " : " n2 " })    插入的数据因为没有主键,所以会增加一条数据

            save({  " name " : " n2 " })   增加一条数据。   

查        

    比较运算:=,!=,>,<,>=,<=#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}})

        #逻辑运算:$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]}}

        })

        #成员运算:$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        }

        )

        #查询数组相关       

         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()


    改

        一 语法:

            db.table.update(

            条件,

            修改字段,

            其他参数

            )

            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}

            )

            #有则修改,无则添加            

            db.user.update(

                {"name":"EGON"},

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

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

            )

            #修改嵌套文档           

             db.user.update(

                {"name":"潘金莲-alex"},

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

            )

            #修改数组            

            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,"新增的字段名":"表达式"}}

            例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、跳过:$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}

            )

        # 补充db.emp.aggregate({"$sample":{"size":3}})#随机选取3个文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容