MongoDB的使用
2018-06-17 20:03:05来源:未知 阅读 ()
一、什么是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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Django项目中使用qq第三方登录。 2019-08-13
- python day1-requests 2019-08-13
- Python连载30-多线程之进程&线程&线程使用 2019-08-13
- Python学习日记(十) 生成器和迭代器 2019-08-13
- 【Python】语法基础 | 开始使用Python 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash