zoukankan      html  css  js  c++  java
  • MongoDB之源生基础概念与语句测试

    此文章,我们拿MySQL和MongoDB做一个简单的理解。

    MySQL的数据库    =》  MongoDB数据库

    MySQL的表      =》  MongoDB的Collection

    MySQL的一行记录   =》  MongoDB的Document

    MySQL的字段     =》  MongoDB的Field

    1、结构图大致如下:

    2、开始一些常用语句的测试:

    // 0.切换数据库,如不存在则创建之,并在插入第一条数据后可以查看到
    use testdb;
    // 查看当前mongoDB的所有数据库
    show databases;
    
    // 1.查询集合中的所有数据(文档Document)
    db.eda.find();
    
    // 2.插入语句
    // 2.1 插入一条数据,如果不指定_id,则会默认帮我们生成
    db.eda.insert({_id:2,"addr":"深圳","date":"2019-12-18"});    // _id=2.0(double)
    db.eda.insert({_id:"3","name":"lishimin","addr":"宝安","age":"19"});        // _id=3(string)
    db.eda.insert({_id:"4","name":"CaiXukun","sex":"女","age":"3"});        // _id=4(string)
    db.eda.insert({_id:NumberInt(7),"name":"caiyan","sex":"女","age":NumberInt(40)});    // _id=7(int)
    // 注意:如果插入的数是一个Int数,需要用NumberInt指定;如果不指定,则数据变成25.0;
    // 格式:NumberInt(数值)
    db.eda.insert({_id:"6","name":"yiyangqianxi","age":NumberInt(19)});        // 19
    db.eda.insert({_id:"5","name":"吴亦凡","age":25});        // 25.0
    
    // 3.查询语句
    // find():返回匹配的记录,不指定参数则为查询所有
    // 3.1 精确查询,查询与之匹配的数据
    db.eda.find({"name":"caihongwei"});
    // 3.2 模糊查询,需要使用$regex指定匹配规则(例: /a/ <=> %a%),$regex的引号可要可不要
    db.eda.find({"name":{"$regex":/h/}});
    // 3.2.1 模糊查询所有name属性中带有c的Document
    db.eda.find({"name":{"$regex":/c/}});
    // 3.2.2 以上模糊查询可简写成
    db.eda.find({"name":/c/});
    // 3.3 模糊查询所有name属性中带有c的Document,其中,i 表示不区分大小写
    db.eda.find({"name":{"$regex":/c/,"$options":"i"}});
    // 3.3.1 以上查询可简写成
    db.eda.find({"name":/c/i});
    // 3.4 查询name域(字段)以c开头的,并且不区分大小写。^ :表示以什么开头 ;i :表示不区分大小写
    db.eda.find({"name":/^c/i})
    // 3.4.1 查询name域(字段)以i结尾的数据(Document)
    db.eda.find({"name":/i$/})
    // 3.5 条件判断查询,查询_id域(Field)不等于4的Document
    db.eda.find({"_id":{$ne:"4"}});
    // 补充:条件表达式还有如下几种:
    /**
        等于:直接匹配,例:"_id":"4"
        不等于:$ne
        大于>:$gt       =>  Great Than
        大于等于>=:$gte       =>  Great Than Equals
        小于<:$lt       =>  Less Than
        小于等于<=:$lte       =>  Less Than Equals
    **/
    // 3.6 查询_id在以下列表中的数据["3","6"]
    db.eda.find({"_id":{$in:["3","6"]}});
    // 3.6.1 查询_id不在以下列表中的数据["3","6"]
    db.eda.find({"_id":{$nin:["3","6"]}});
    // 解读:
    /**
        $in : 和MySQL中的select xxx in(x,x,x) 类似
        $nin : 和select xxx not in(x,x,x)
    **/
    // 3.7 关系查询:$or和$and的使用
    // 3.7.1 查询性别为女并且($and)名字以c开头的Document(不区分大小写)
    db.eda.find({$and:[{"sex":"女"},{"name":/^c/i}]});
    // 3.7.2 查询性别为女的Document或者年龄小于20的Document
    db.eda.find({$or:[{"sex":"女"},{"age":{$lt:20}}]});
    
    // 4.findOne():查询一条记录,多个结果只返回第一条
    db.eda.findOne();
    // 4.1 也可以指定查询条件
    db.eda.findOne({"name":/c/});
    // 注意:findOne()个人感觉等价于limit(1),暂时没有发现其他不同,limit()的参数可用来指定返回的Document数目
    db.eda.find().limit(2);
    
    // 5.修改语句
    /**
        命令格式:
            db.collection.update(criteria,objNew,upsert,multi)
        参数说明:
            criteria:查询的条件,会依据查询条件来进行修改
            objNew:更新的内容,如果不使用$set,则会造成数据替换 原来数据被替换成要修改的数据,这样不能修改某个字段(丢失字段)
            upsert:默认fasle,如果不存在update的记录,是否插入objNew这个新的文档,true为插入。
            multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。
    **/
    // 5.1 修改_id为6的Document的地址为"福田",如果不存在该字段,则新增该字段,只改变第一条
    db.eda.update({"_id":"6"},{$set:{"addr":"福田"}});
    // 5.2 修改name以c开头且不区分大小写,把其sex字段设置成男,并且改变所有查询结果
    db.eda.update({"name":/^c/i},{$set:{"sex":"男"}},{multi:true});
    
    // 6.删除语句
    // 6.1 删除指定记录,删除_id为2.0的记录
    db.eda.remove({"_id":2});
    // 6.2 删除集合中的所有记录
    db.eda.remove({});
    
    // 6.2 删除所有记录
    
    
    // ----常用函数----
    // 1.日期函数(查看当前日期)
    Date();
    // 2.统计表中(集合中),数据(Document)的个数
    db.eda.count();

    至此,简单的测试完成!

  • 相关阅读:
    iOS ARC编译器规则和内存管理规则
    Servlet与JSP的关系
    传统javabean与spring中的bean的区别
    servlet学习笔记
    JAVA里面"=="和euqals的区别
    java垃圾回收
    java中初始化块、静态初始化块和构造方法
    抽象类与接口的区别
    Servlet 与 CGI 的比较
    spring的事务传播特性
  • 原文地址:https://www.cnblogs.com/Nickc/p/12060489.html
Copyright © 2011-2022 走看看