MongoDB的使用

2018-06-17 20:03:05来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

一、什么是MongoDB?

  MongoDB 是一个基于分布式文件存储的数据库。

  MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

 

二、名词解析

  1、database  数据库

  2、collection  数据表/集合

  3、document  数据记录行/文档

  4、field      字段/域

  5、index    索引

  6、primary key  主键(自动将_id字段设置为主键)

 

三、什么是文档

  MongoDB 的文档,就相当于sql的数据表。文档是一组键值(key-value)对(即BSON)。

  MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

  一个简单的文档例子如下:

    {"name":"菜鸟教程","site":"www.runoob.com","create_time":"2017-12-13"}

  其实文档的键,就相当于表中的字段,文档的键不能重复。键的命名不能为空字符,不能使用含有特别意义的符号。一般遵循数据库设计的规范吧,全是英文,用下划线隔开。

  文档的键值对是有序的。文档中的值可以不是字符串(甚至可以是整个嵌入的文档)。MongoDB区分类型和大小写。

  

四、MongoDB的语法

  1、数据库:

    ①  use  DATABASE_NAME;  -- 如果数据库不存在,则创建数据库,否则切换到指定数据库。

    ②  db.dropDatabase()  --删除当前数据库

  2、数据表/集合:

    ①  db.createCollection(name,option)  -- 创建集合(集合名称,option是一个文档,指定有关内存大小和索引),option可选

    ②  db.COLLECTION_NAME.drop()  -- 删除集合

  3、文档

    ①  db.COLLECTION_NAME.insert(document)  -- 插入文档

    ②  db.collection.update(query,update,{upsert:boolean,mutli:boolean,writeConcern:document})  -- 更新文档(该值)

       db.collection.save({_id:ObjectId(),……})  --更新文档(覆盖,替换掉整个文档)

    ③  db.collection.remove(query,{justOne:boolean,writeConcern:document})  -- 删除文档

    ④  db.collection.find(document).pretty()  -- 查询数据(.pretty()可选,以格式化的方式显示结果)

       db.collection.findOne(document)  -- 查询数据(只返回第一个文档)

    参数说明:

      query:查询条件,找到需要更新的数据,可以理解为sql中的where

      update:update的对象和一些更新的操作符(如$,$inc...)等,可以理解为sql中update中的set

      upsert:可选,默认为false,为true时表示 如果不存在则插入数据

      multi:可选,默认为false,只更新找到的第一条记录,为true时,则更新找到的全部记录(意思就是批量更新)

      justOne:可选,如果为true或1,则只删除一个文档

      writeConcern:可选,抛出异常的级别

 

五、操作符

  1、条件操作符

    ①  $gt    -- 大于

    ②  $lt     -- 小于

    ③  $gte       -- 大于等于

    ④  $lte     -- 小于等于

    ⑤  $eq     -- 等于

    ⑥  $ne     -- 不等于

    ⑦  $exist    -- 存在

    ⑧  $type     -- 数据类型

    ⑨  $mod     -- 取余

    ⑩  $regex   -- 正则表达式

  2、逻辑操作符

    ①  $or      -- 或

    ②  $and      -- 与

    ③  $not    -- 非

    ④  $nor    -- 都非

  3、数组操作符

    ①  $all      -- 数组字段中包含所有指定元素

    ②  $elemMatch  -- 内嵌文档或数组中的部分字段(field)

    ③  $size           -- 数组长度

    ④  $slice     -- 数组切片*(分页)

  4、更新操作符

    ①  $inc       -- 某个字段值自增/减某个数字

    ②  $mul      -- 某个字段值乘以某个数字

    ③  $rename     -- 重命名某个字段名

    ④  $set          -- 更新某个字段值

    ⑤  $unset         -- 删除某字段,若字段不存在则不操作

    ⑥  $min         -- 比较,若某字段值大于指定值则更新,设置最小值

    ⑦  $max        -- 比较,若某字段值小于指定值则更新,设置最大值

    ⑧  $eurrentDate    -- 设置指定字段为当前时间

    ⑨  $addToSet        -- 添加一个元素到数组中

    ⑩  $pop         -- 删除数组中的第一个或最后一个元素,-1表示第一个,1表示最后一个

    ?  $pullAll     -- 删除数组或内嵌文档字段中所有指定的元素

    ?  $pull       -- 删除满足条件的元素

    ?  $pushAll      -- 弃用,等同于$push和$each连用

    ?  $push       -- 更新某个字段值

    ?  $each          -- 配合$push或$addToSet使用

    ?  $sort         -- 配合$push使用,表示给文档中的指定数组元素排序,1是升序,-1是降序

    ?  $position     -- 配合$push使用表示往数组元素中的指定位置插入元素

 

六、实例

 1 // 不存在则创建数据库test
 2 use test;
 3 // 创建集合(表)
 4 db.createCollection('student',{capped:true,size:100000});
 5 // 插入文档
 6 db.student.insert({"id":1,"code":"2017001","name":"xiaoming","age":18});
 7 db.student.insert({"id":2,"code":"2017002","name":"小红","age":19});
 8 // 插入多个文档
 9 db.student.insert({"id":3,"code":"2017003","name":"小强","age":20},{"id":4,"code":"2017004","name":"小刚","age":20});
10 // 更新文档
11 // 名字写错了,更新名字(某字段)的值,只更新第一条记录
12 db.student.update({"id":1},{$set:{"name":"小明"}});
13 // 批量更改
14 db.student.update({"age":20},{$set:{"age":21}},{mutli:true});
15 // 小刚过生日了,年龄加1
16 db.student.update({"name":"小刚"},{$inc:{"age":1}});
17 // save的更新操作:如果集合内已经存在 一个和obj相同的id记录,刚替换,不存在刚插入obj
18 db.student.save({"id":2,"code":"2017002","name":"大红","age":25});
19 //将返回集合中所有文档
20 db.student.find({});  //db.student.find();
21 // 查询年龄大于19的学生
22 db.sudent.find({"age":{$gt:19}});
23 // 查询小强的学号,_id总是被返回,设置为0移除掉
24 db.student.findOne({"name":"小强"},{"code":1,"_id":0});
25 // 查询名字都是小强且年龄大于等于20岁的同学
26 db.student.find({$and:[{"name":"小强"},{"age":{$gte:20}]});     // 等同于: db.sudent.find({"name":"小强","age":{$gte:20}});
27 // 清空集合student的文档
28 db.student.remove({});//db.student.remove();

 

 

七、参考链接

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

  http://chenzhou123520.iteye.com/blog/1637629

  http://blog.csdn.net/qq_16313365/article/details/58599253

 

八、补充

1 // 批量插入数据
2 for(i=4;i<100;i++)db.student.insert({x:i})
3 // 查找 从第6个开始(i从0开始),往后只要10条数据,按x排序
4 db.student.find().skip(5).limit(10).sort({x:1})

 

 1 // 更新一个字段的值为另一个字段的值(字段值的复制)
 2 // 根据条件查询数据,对数据进行forEach遍历,x表示当前数据
 3 db.asset_entity.find({"asset_type":"2421"}).forEach(function(x){
 4     // if(x.pcHostEquip.id_address_out){
 5     //       db.asset_entity.update({"_id":x._id},{$set:{"asset_ip":x.pcHostEquip.id_address_out}}); 
 6     // }
 7     // if(x.pcHostEquip.id_address_in){
 8     //       db.asset_entity.update({"_id":x._id},{$set:{"asset_ip":x.pcHostEquip.id_address_in}}); 
 9     // }
10     // 如果这个字段不为空,更新字段asset_ip
11     if(x.raid.IP){
12           db.asset_entity.update({"_id":x._id},{$set:{"asset_ip":x.raid.IP}}); 
13     }
14     // if(x.safetyEquip.IP){
15     //       db.asset_entity.update({"_id":x._id},{$set:{"asset_ip":x.safetyEquip.IP}}); 
16     // }
17 });

   关于mongodb可以写js代码这个问题,我也是瞎蒙的,它到底支持哪些js语法,不支持哪些js语法,对我来说它就是个迷。

  本篇随笔的所有代码都是在Mongodb的可视化工具MongoBooster上写的,我听说甚至还存在写好一个js文件直接用Mongodb命令执行这样的神操作。

  我试过的语句中,js的基本语法都能用,DOM,BOM对象基本上不能用。console能用,alert()不能用。至于别的,我没有去试。

  下面是项目维护时改需求,增改字段的一些操作。原字段in_cabinet_location(位置),新增字段cabinet_uBegin(开始位置),cabinet_uEnd(结束位置)。

  原字段值输入格式不定,如1U-2U,1-2U,1-2,1,1U。把原字段的值赋给新字段,避免数据丢失,又不用一个个手录。新增字段的格式为只存数字。

 1 db.asset_entity.find({}).forEach(function(x){
 2     var y=x.in_cabinet_location;
 3     if(y){
 4         var index=y.indexOf("U");
 5         var index2=y.indexOf("-");
 6         if(index2<0){
 7             if(index<0){
 8  
 9             }else{
10                 y=y.substring(0,index);
11             }
12             console.log(x.in_cabinet_location,y,y);
13             // db.asset_entity.update({"_id":x._id},{$set:{"cabinet_uBegin":y}}); 
14             // db.asset_entity.update({"_id":x._id},{$set:{"cabinet_uEnd":y}});
15         }else{
16             var a=y.substring(0,index2);
17             var b=y.substring(index2+1,y.length);
18             if(a.indexOf("U")<0){
19                 // db.asset_entity.update({"_id":x._id},{$set:{"cabinet_uBegin":a}}); 
20             }else{
21                 a=a.substring(0.a.indexOf("U"));
22             }
23             if(b.indexOf("U")<0){
24                 
25             }else{
26                 b=b.substring(0.b.indexOf("U"));
27             }
28             console.log(x.in_cabinet_location,a,b);
29             // db.asset_entity.update({"_id":x._id},{$set:{"cabinet_uBegin":a}}); 
30             // db.asset_entity.update({"_id":x._id},{$set:{"cabinet_uEnd":b}});
31         }
32     }
33 });

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:MongoDB学习(1)--安装,基本curd操作

下一篇:springboot集成h2