MongoDB-增删改查操作

    本篇介绍一下MongoDB基本的增删改查的操作。首先来看看几个基本的数据库命令:

查看数据库: show dbs

切换数据库: use python21

查看集合:show collections

创建集合:db.createCollection("nor_col")

创建一个有容量限定的集合: db.createCollection("cap_col",{capped:true, size:10})

    -设置集合容量大小后,如果插入的数据超过了容量的大小,新的数据会插入,最旧的数据会被删除。比如存放日志信息,几个月前的日志就没有什么价值了,就可以冲掉了。而且日志不能篡改吧。固定大小的集合数据插入之后就不允许修改了。所以有容量限定的集合可以用在日志文档的存储。

    下面就看看怎么做增删改查操作:

1、MongoDB插入数据:

    命令: db.集合名.insert(document)

    单条数据插入:db.nor_col.insert({name:"yang",age:18,class:1,num:1})

    多条数据批量插入: db.nor_col.insert([{name:"liu",age:35,class:2,num:3},{name:"liu",age:50,class:2,num:40}])

2、MongoDB 数据保存:

    命令:db.集合名称.save(document)

    示例: db.stu.save({_id:'20210221',name:wang,gender:2})    

    先根据 _id去查找,如果查找到了,然后检查_id后面的数据是否相同,相同的话放弃操作,不相同的话,更新操作。如果没有查找到。就插入这条数据。

2、MongoDB查询操作:

    命令: db.集合名称.find(查询条件)

        查询条件:

            比较运算符:

                等于:默认是等于判断,没有运算符

                小于:$lt (less than)

                小于等于: $lte(less than equal)

                大于: $gt (greater than)

                大于等于: $gte

                不等于: $ne

            逻辑运算符:

                and: 在json中写多个条件即可

                    示例:查询年龄大于或等于18,并且性别为true的学生

                        db.stu.find({age:{$gte:18},gender:true})

                        db.stu.find({$and:[{age:18},{gender:true}]})

                or: 使用$or,值为数组,数组中每个元素为json

                    示例1:查询年龄大于18岁,或性别为false的学生

                        db.stu.find($or:[{age:{$gte:18},{gender:false}}])

                    示例2:查询年龄大于18或性别为男生,并且姓名是郭靖

                        db.stu.find($or:[{age:{$gte:18}},{gender:true}],name:"郭靖")

                    示例3:显示查询操作的详细信息。

                        db.stu.find().explain('executionStats')

            范围运算符:

                使用$in, $nin 判断数据是否在某个数组内

                示例1:查询年龄为18,28的学生

                    db.stu.find({age:{$in:[18,28]}})

                示例2:查询年龄不在18,28的学生

                    db.stu.find({age:{$nin:[18,28]}})

            支持正则表达式: 

                使用$regex编写正则表达式

                查询name以'黄'开头的数据

                示例: db.stu.find({name:{$regex:'^黄'}})

            只查询一条数据:

                命令:db.集合名称.findOne()

            自定义查询:

                mongo shell是一个js的执行环境,使用$where写一个函数,返回满足条件的数据。

                示例:查询年龄大于30的学生。

                    db.stu.find({$where:function(){

                        return this.age >30;

                    }})

            skip、limit:可以做分页操作:

                命令:

                    db.stu.find().skip(num)

                    db.stu.find().limit(num)

                示例:

                    db.stu.find().limit(4).skip(5)

                    db.stu.find().skip(5).limit(4)

           投影:在查询到的返回结果中,只选择必要字段

                命令:db.集合名称.find({},{字段名称:1,.....})

                   参数为字段与值,值为1表示显示,值为0不显示,特别注意:

                       1、对于_id列默认是显示的,如果不显示需要明确设置为0

                       2、对于其他不显示的字段不能设置为0

                示例:

                    db.stu.find({},{_id:0,name:1,gender:1})

            排序:方法sort(),用于对查询结果按照指定的字段进行排序。

                命令:db.集合名称.find().sort({字段:1,.....})

                参数1为升序排序,参数-1为降序排序。

                示例:

                    根据性别降序,再根据年龄升序。

                    db.stu.find().sort({gender:-1,age:1})

            统计个数:方法count()用于统计结果集中文档条数

                命令: db.集合名称.find({条件}).count()

                示例:

                    db.stu.find({gender:true}).count()

                    db.stu.count({age:{$gt:20},gender:true})

            去重:

                db.stu.distinct("hometown")

                db.stu.distinct("hometown",{age:18})

3、MongoDB的更新操作:

        命令:db.集合名称.update({query},{update},multi:boolean)

            -参数query:查询条件

            -参数update:更新操作符

            -参数multi:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的所有数据全部更新

        示例1:根据条件更新整个文档的数据。

            原始数据:

                { "_id" : ObjectId("6031a9455050ea1c221bf28d"), "name" : "liu", "age" : 50, "class" : 2, "num" : 40 }

            执行命令:

                db.nor_col.update({num:40},{name:"liu2"})

            更新后的数据:

                { "_id" : ObjectId("6031a9455050ea1c221bf28d"), "name" : "liu2" }

        示例2:更新第一条找到匹配条件的数据。
            原始数据:
                { "_id" : ObjectId("6031a8bd5050ea1c221bf289"), "name" : "wang", "age" : 45, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8c65050ea1c221bf28a"), "name" : "wang", "age" : 40, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8d15050ea1c221bf28b"), "name" : "wang", "age" : 50, "class" : 2, "num" : 2 }
            执行命令:
                db.nor_col.update({name:"wang"},{$set:{age:25}})
            更新后数据:
                { "_id" : ObjectId("6031a8bd5050ea1c221bf289"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8c65050ea1c221bf28a"), "name" : "wang", "age" : 40, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8d15050ea1c221bf28b"), "name" : "wang", "age" : 50, "class" : 2, "num" : 2 }

        示例3:更新所有匹配条件的数据。
            原始数据:
                { "_id" : ObjectId("6031a8bd5050ea1c221bf289"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8c65050ea1c221bf28a"), "name" : "wang", "age" : 40, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8d15050ea1c221bf28b"), "name" : "wang", "age" : 50, "class" : 2, "num" : 2 }
            执行命令:
                db.nor_col.update({name:"wang"},{$set:{age:25}},{multi:true})
            更新后数据:
                { "_id" : ObjectId("6031a8bd5050ea1c221bf289"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8c65050ea1c221bf28a"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8d15050ea1c221bf28b"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }

        示例4:更新所有数据中age字段的值。
            原始数据:
                { "_id" : ObjectId("6031a8bd5050ea1c221bf289"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8c65050ea1c221bf28a"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8d15050ea1c221bf28b"), "name" : "wang", "age" : 25, "class" : 2, "num" : 2 }
            执行命令:
                db.nor_col.update({},{$set:{age:21}},{multi:true})
            更新后的数据:
                { "_id" : ObjectId("6031a8bd5050ea1c221bf289"), "name" : "wang", "age" : 21, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8c65050ea1c221bf28a"), "name" : "wang", "age" : 21, "class" : 2, "num" : 2 }
                { "_id" : ObjectId("6031a8d15050ea1c221bf28b"), "name" : "wang", "age" : 21, "class" : 2, "num" : 2 }

        示例5:upsert参数,找到匹配的字段就更新,没有找到就插入一条新数据
            原始数据:
                { "_id" : "6031a9455050ea1c221bf28d", "python" : "hello mongodb", "age" : 21 }
            执行命令:
                db.nor_col.update({python:"nihao mongo"},{$set:{age:100}},{upsert:true})
            更新后的数据:
                { "_id" : ObjectId("603267c4c7c8ce72d1164470"), "python" : "nihao mongo", "age" : 100 }

4、MongoDB的删除:

    命令:db.集合名称.remove({query},{justOne:boolean})

        -参数query可选,删除的文档条件。

        --参数justOne:可选,如果设为true或1,则只删除一条,默认false,表示删除全部

    示例1:删除所有name=wang的数据

        db.nor_col.remove({name:"wang"})

    示例2:删除name=wang的第一条数据

        db.nor_col.remove({name:"wang"},{justOne:true})

 

 

参考:

 

posted @ 2021-02-22 08:55  寻找风口的猪  阅读(549)  评论(0编辑  收藏  举报