zoukankan      html  css  js  c++  java
  • 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个文档
  • 相关阅读:
    idea spring boot启动项目上面有红色叉
    hibernate Criteria中多个or和and的用法 and ( or or)
    CAS Server 4.2.7(自定义密码验证) 部署
    Web应用系统集成CAS-rest指南
    用DBMS_REDEFINITION将普通表转换为分区表
    windows编译libevent时报告“缺少print_winsock_errors.obj”的解决
    Oracle表增删分区的脚本
    libcassandra开发示例
    关于MongoDB API的两个小经验
    C/C++开发Cassandra的一些经验
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/8329705.html
Copyright © 2011-2022 走看看