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则新增,必须指定_id
        db.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 = 3
        db.user.find({"_id":3})
#2、select * from db1.user where id != 3
        db.user.find({"_id":{"$ne":3}})
#3、select * from db1.user where id > 3
        db.user.find({"_id":{"$gt":3}})
#4、select * from db1.user where age < 3
        db.user.find({"age":{"$lt":3}})
#5、select * from db1.user where id >= 3
        db.user.find({"_id":{"$gte":3}})
#6、select * from db1.user where id <= 3
        db.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,$nin
        db.user.find({"name":{"$in":["alex","egon"]}})
        db.user.find({"name":{"$nin":["alex","egon"]}})
#正则匹配
        select * from db1.user where name regexp "^jin.*?(g|n)$";
        db.user.find({
            "name":/^jin.*?(g|n)$/i
        })
#查看指定字段
        select name,age from db1.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、$addToSet
            db.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 from db1.emp where age > 20 group by post having avg(salary) > 10000;
#$match
            #1、select * from db1.emp where age > 20
            db.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个文档
python mongodb操作大全的更多相关文章
- Python列表操作大全(非常全)
		
Python列表操作大全(非常全!!!) 对于python列表的理解可以和C语言里面的数组进行比较性的记忆与对照,它们比较相似,对于python里面列表的定义可以直接用方括号里加所包含对象的方法,并且 ...
 - python列表操作大全
		
Python列表操作大全 对于python列表的理解可以和C语言里面的数组进行比较性的记忆与对照,它们比较相似,对于python里面列表的定义可以直接用方括号里加所包含对象的方法,并且python的列 ...
 - Python文件操作大全
		
Python 编程文件操作大全 文件打开模式 打开模式 执行操作 'r' 以只读方式打开文件(默认) 'w' 以写入的方式打开文件,会覆盖已存在的文件 'x' 如果文件已经存在,使用此模式打开将引 ...
 - Python字典操作大全
		
//2018.11.6 Python字典操作 1.对于python编程里面字典的定义有以下几种方法: >>> a = dict(one=1, two=2, three=3) > ...
 - python文件目录操作大全
		
python只获取当前目录下的文件夹及文件名 list = os.listdir(rootdir)#列出目录下的所有文件和目录 for line in list: filepath = os.path ...
 - 转:关于python文件操作大全
		
转自:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html python中对文件.文件夹(文件操作函数)的操作需要涉及到o ...
 - Python文件操作大全,随机删除文件夹内的任意文件
		
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法: os.path.abspath(path) #返回绝对路径os.path.basename(path ...
 - python字符串操作大全
		
1.去空格 strip() >>> s = 'a b c d ' >>> s.strip() 'a b c d' 2.lstrip() 方法用于截掉字符串左边的空格 ...
 - Python字符串操作大全(非常全!!!)
		
1. python编程里字符串的内置方法(非常全) capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居 ...
 
随机推荐
- DBA手记(学习) - LOGMNR 简单而强大的工具
			
LOGMNR首先执行一个ddl(或dml)操作,以记录重做信息: SYS@ ora11g>conn scott/tigerConnected.SCOTT@ ora11g>alter sys ...
 - Xcode缓存数据清除
			
1. 移除 APP 打包的ipa历史版本(Archives) 不可恢复,就是你打的包,如果需要dysm文件,及时备份 路径:~/Library/Developer/Xcode/Archives 2. ...
 - LVS负载均衡机制之LVS-DR模式工作原理以及简单配置
			
本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR:如有汇总不当之处,请各位在评论中多多指出. LVS-DR原理: LVS的英文全称是Linux Virtual Server ...
 - -L -Wl,-rpath-link -Wl,-rpath区别精讲
			
目录 前言 源码准备 源码内容 尝试编译,保证源码没有问题 编译 首先编译world.c 编译并链接hello.c 调试编译test.c 结论 转载请注明出处,谢谢 https://www.cnblo ...
 - Linux常用命令拾遗
			
查看端口对应的程序: netstat -nlap | grep 5004 输出: tcp 0 0 192.168.3.000:5004 192.118.201.00:50800 ESTABLISHED ...
 - Java操作Redis(一)
			
一.创建项目,导入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis& ...
 - elasticsearch启动时提示内存不足错误的解决方法
			
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0 ...
 - Python面向对象总结及类与正则表达式
			
Python3 面向对象 一丶面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 方法:类中定义的函数. 类变 ...
 - 盒模型與BFC
			
盒模型 基本概念 什么是 CSS 盒模型?相信大部分人都能答出这个问题来,那就是 标准模型 + IE 模型 标准模型: IE 模型 很明显 在 标准盒子模型中,width 和 height 指的是内容 ...
 - 原生js三级联动
			
<!DOCTYPE html> <html lang="en"> <head> <title> 三级联动 </title> ...