• 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})

    参考:

  • 相关阅读:
    捉BUG记(To Catch a Bug)
    发布一个简单的knockout-easyui绑定库
    笔记:Hyper-V上Centos 6.5分辨率调整问题解决笔记
    Asp.net中HttpRequest.Params与Reques.Item之异同
    Oracle必须死之奇怪的ORA-06502错误
    centos7 搭建bitcoin/usdt 节点服务
    webpack安装配置
    centos7 rsyslog
    nginx+fpm 开机自启
    centos7下 PHP添加pdo_myql扩展
  • 原文地址:https://www.cnblogs.com/happyflyingpig/p/14427587.html
Copyright © 2020-2023  润新知