• MongoDB基础操作


    插入

    Insert:

    db.getCollection('protest').insert({"name":"shaozhqi","sex":"男"})
    
    image.png
    image.png

    查看插入数据:

    image.png
    image.png

    Save:

    image.png
    image.png

    现在有两条数据:

    image.png
    image.png

    插入定义好的变量:

    image.png
    image.png

    查看结果:

    image.png
    image.png

    InsertOne:

    db.getCollection('protest').insertOne({
     "name":"花无缺",
     "sex":"男"
    })
    

    查看结果:

    image.png
    image.png

    insertMany:

    db.getCollection('protest').insertMany([
     {
     "name":"花有缺",
     "sex":"男"
     },
     {
     "name":"小鱼儿",
     "sex":"女"  
     }
     ]);
    
    image.png
    image.png

    Sava与insert:

    如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

    验证:
    当使用insert,并且指定花有缺的id,更新名称,执行报错主键冲突:

    image.png
    image.png

    使用save则已是更新成功:

    image.png
    image.png

    查看结果:

    image.png
    image.png

    Update

    默认更新一条:
    写法一:

    image.png
    image.png

    更新结果:

    image.png
    image.png

    写法二:

    image.png
    image.png

    更新结果:

    image.png
    image.png

    写法三:
    可以看到写法一的第一个set没有生效,修改如下:

    image.png
    image.png

    查看执行结果:

    image.png
    image.png

    疑问点sex我们设置的和之前的值一样不能区分是否变更,修改如下执行:

    image.png
    image.png
    image.png
    image.png

    果然也有问题;
    总结:如果要跟新多个字段只能用写法二的方式;

    Update并且添加部门节点

    image.png
    image.png

    查看结果:

    image.png
    image.png

    修改设计部为产品部:

    image.png
    image.png

    执行结果:

    image.png
    image.png

    注:$这里是找到满足条件的子元素下标为name的字段

    给我添加一辆宝马:

    image.png
    image.png

    查看结果:

    image.png
    image.png

    修改宝马为使用了三年:
    不能这么做:

    image.png
    image.png

    结果:

    image.png
    image.png

    会导致对象覆盖,数据丢失。
    应该这么做:
    我们先还原数据:

    db.getCollection('protest').update(
     {"name":"邵志奇"},//条件
     {$set:{"carinfo":{"name":"宝马X","price":"100万","use":"2年"}}}//要更新的字段
    );
    
    image.png
    image.png

    更新语句:

    image.png
    image.png

    更新结果:

    image.png
    image.png

    这里是单个对象,所有不适用$,使用后会报错
    Update 跟新多条:
    更新所有男性,分到A组:
    可以看到只有一条数据更新:

    image.png
    image.png
    image.png
    image.png

    multi

    可以总结下update语法:

    db.collection.update(
     <query>,
     <update>,
     {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
     }
    )
    

    query : update的查询条件,类似sql update查询内where后面的。
    update : update的对象和一些更新的操作符(如,inc...)等,也可以理解为sql update查询内set后面的
    upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    writeConcern :可选,抛出异常的级别。
    修改语法如下:

    image.png
    image.png

    查看更新结果:

    image.png
    image.png

    也可简写:

    image.png
    image.png

    跟新结果:

    image.png
    image.png

    updateMany:

    也可以用updateMany:这样就不用在写后面的参数了

    image.png
    image.png

    更新结果:

    image.png
    image.png

    当然updateOne是更新单个文档了

    删除remove

    默认删除满足条件的全部
    remove已近过时:官方推荐使用deleteOne与deleteMany
    删除如下数据:

    image.png
    image.png


    语法:

    image.png
    image.png


    查看结果:

    image.png
    image.png

    可在语法上加1限制删除一条

    image.png
    image.png

    Remove语法:

    db.collection.remove(
     <query>,
     {
     justOne: <boolean>,
     writeConcern: <document>
     }
    )
    

    query :(可选)删除的文档的条件。
    justOne : (可选)如果设为 true 或 1,则只删除一个文档。
    writeConcern :(可选)抛出异常的级别。

    deleteOne与deleteMany

    语法类似remove,么有后面的限制条件了

    查询Find

    简单语法:

    db.getCollection('protest').find({"_id":ObjectId("5af4f87d222a56e8480bd0e7")})
    

    之前准备的全部数据:

    image.png
    image.png

    Or:
    查找A组或者C组的全部成员:

    image.png
    image.png

    准备以下数据:

    image.png
    image.png

    查询语句:

    db.getCollection('protest').find({"age":{$gt:20},$or:[{"group":"A组"},{"group":"C组"}]})
    

    年龄要大于20并且必须是A组或者C组的人。如果数据中确实对应的字段会被直接过滤掉

    image.png
    image.png

    指定返回查询内容:

    db.getCollection('protest').find({"age":{$gt:20},$or:[{"group":"A组"},{"group":"C组"}]},{name:1,by:1,sex:1,by:1})
    db.getCollection('protest').find({"age":{$gt:20},$or:[{"group":"A组"},{"group":"C组"}]},{name:1,sex:1,by:1})
    db.getCollection('protest').find({"name":"邵志奇"},{"deptIds":1})//查看部门
    

    _id 键默认返回,需要主动指定 _id:0 才会隐藏

    image.png
    image.png

    In:

    db.getCollection('protest').find({"age":{$in:[20,19,24]}})
    db.getCollection('protest').find({"age":{"$in":[20,19,24]}})
    

    MongoDB常用操作符

    (>) 大于 - $gt
    (<) 小于 - $lt
    (>=) 大于等于 - $gte
    (<= ) 小于等于 - $lte
    $ne ----------- not equal !=
    $eq -------- equal =
    

    Limit &&skip

    返回满足条件一条记录数

    db.getCollection('protest').find({}).limit(1)
    

    跳过前四条满足条件的数据,所以就会直接找到第五条

    db.getCollection('protest').find({}).skip(4)
    

    排序

    ongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列
    语法示例:
    按照age由大到小排序

    db.getCollection('protest').find({}).sort({"age":-1})
    
    image.png
    image.png

    多字段排序:
    按照age降序,_id升序

    db.getCollection('protest').find({}).sort({"age":-1,"_id":1})
    

    注:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。

    索引
    语法:db.COLLECTION_NAME.ensureIndex({KEY:1})
    Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可
    示例:

    db.getCollection('protest').ensureIndex({"name":1})
    

    复合索引:

    db.getCollection('protest').ensureIndex({"name":1,"age":1})
    

    其他参数:

    image.png
    image.png

    示例:

    db.getCollection('protest').ensureIndex({open: 1, close: 1}, {background: true})
    

    聚合统计

    http://www.runoob.com/mongodb/mongodb-aggregate.html

    查看查询语句执行过程

    db.getCollection('protest').find({"name":"邵志奇"}).explain()
    

    记录

    db.user1.update({"_id":"1"},{$set:{"name":"shao","age":"28"}})
    

    // 需要更新那个数据,前面的大括号是条件,后面是要清空原有这条记录的所有字段(不包括_id)后要新存入的字段
    //in语句

    db.getCollection('dept').find({"_id":{$in:["33cce2d200da4626bbbbf5513594120c","6253ed4309e64a42b37005ebfb8edced"]}})
    db.getCollection('label').remove({"canDelete":1})
    db.getCollection('label').remove({"companyId":{$exists:true}})
    db.label.save([{
     "_id" : "1",
     "chnName" : "部门",
     "createTime" : NumberLong("1521705391609"),
     "updateTime" : NumberLong("1521705391609"),
     "showState" : NumberInt(1),
     "canDelete" : NumberInt(0),
     "canModify" : NumberInt(0)
    },
    {
     "_id" : "2",
     "chnName" : "邮箱",
     "createTime" : NumberLong("1521705391610"),
     "updateTime" : NumberLong("1521705391610"),
     "showState" : NumberInt(1),
     "canDelete" : NumberInt(0),
     "canModify" : NumberInt(0)
    }]
    )
    

    //这里save也可用insert替换,貌似insert是_id数据库原有值时用

    插入单条数据

    > var document = db.collection.insertOne({"a": 3})
    > document
    {
     "acknowledged" : true,
     "insertedId" : ObjectId("571a218011a82a1d94c02333")
    }
    

    插入多条数据

    > var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
    > res
    {
     "acknowledged" : true,
     "insertedIds" : [
     ObjectId("571a22a911a82a1d94c02337"),
     ObjectId("571a22a911a82a1d94c02338")
     ]
    }
    

    orgId:a7e7e48cab1c4ee385e1cc78ad4fb009
    passportId:312953f38a1b4a00a2c35f9050534f79

    Query query=new Query(Criteria.where("companyId").is(companyId).and("groupId").ne(null).ne("").exists(true));
     query.with(new Sort(Sort.Direction.DESC, "sort"));
     return find(query);
    db.getCollection('book_attr_templ').find({"org_id":"a7e7e48cab1c4ee385e1cc78ad4fb009","ekey":{$nin:["uo_name","uo_position","uo_phone","uo_email"]}})
    

     

  • 相关阅读:
    unittest单元测试框架之unittest工作原理(一)
    unittest单元测试框架之unittest案例(二)
    mysql 查询导出(txt,csv,xls)
    JS 无限长form表单提交
    PHP设计模式的六大设计原则
    MySql 双主多从配置指导
    MySQL5.7开多实例指导
    MySQL主从复制配置指导及PHP读写分离源码分析
    《单元测试之道Java版》的读书笔记
    《重构》的读书笔记–方法列表
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/11535098.html
Copyright © 2020-2023  润新知