MONGO的简单语法,新手实用
window上启动方式:(简单略)
mongod --dbpath E:\study_lib\mongodb\db --port=27000
show dababases;
(创建配置文件的启动方式)
mongod -f E:\study_lib\mongodb\mongodb.conf
一、常用命令:
查看当前所用的用户:
db
查所有数据库列表:
show databases;或者 show dbs;
查所有的表:
show collections;
删除当前连接的数据库:
db.dropDatabase();
删除集合(表)
db.dept.drop();
新增集合(表):
for(var i =0; i <20;i++){
db.createCollection("log"+i )};
备份(存放目录在当前文件夹下的backup目录下):
C:\Users\Administrator.SC-201605302031>mongodump -d infos -o backup -port 27001
还原:
C:\Users\Administrator.SC-201605302031>mongorestore -d infos2 --drop backup/infos -port 27001
二、增删改查操作
--插入数据
var deptDate = {
"deptno":20,
"dname" : "研发部",
"acount" : "20人",
"avg" : 8000
};
db.dept.insert(deptDate);
--查询数据
db.dept.find();
--删除数据
db.dept.remove({"_id":ObjectId("5850ba7eda14e47aa0d9174a")});
--更新数据
var deptDate = {
"deptno":222,
"dname" : "家里蹲",
"acount" : "22人",
"avg" : 10000
};
db.dept.insert(deptDate);
(更新值)
var deptDate = {
"deptno":333,
"dname" : "家里蹲",
"acount" : "33人",
"avg" : 10000
};
db.dept.update({"_id":ObjectId("5850bbe6da14e47aa0d9174b")},deptDate);
三、数据操作(重点)
除了增加外,其他都很麻烦。
1.数据增加
查询的核心语法:
db.集合.insert();
db.infos.insert({"url":"www.baidu.com"});
增加10000条,javascript脚本
for(var x =0; x< 10000 ;x++){
db.infos.insert({"url":"www.baidu"+x+".com"});
};
2.数据的查询操作
mongo的数据库的关系运算、逻辑运算、数组运算、正则运算
查询的核心语法:
db.集合名称.find({查询条件}[,{设置显示的字段}]);
第二个参数 0不显示,1显示(默认);
db.infos.find({},{"_id": 0,"url":1});
db.infos.find({"url":"www.baidu.com"},{"_id": 0});
pretty()函数,美化显示;
db.infos.find({"url":"www.baidu.com"},{"_id": 0}).pretty();
db.infos.findOne({"url":"www.baidu.com"},{"_id": 0}).pretty();
关系查询(大于$gt 大于等于$gte 不等于$ne 小于等于$lte 等于key :value)
db.student.drop();
db.student.insert({"name":"张三","age":19,"sex":"男","address":"盐城市"});
db.student.insert({"name":"张四","age":29,"sex":"男","address":"盐城市"});
db.student.insert({"name":"张五","age":39,"sex":"男","address":"盐城市"});
db.student.insert({"name":"张六","age":49,"sex":"女","address":"盐城市"});
db.student.insert({"name":"张七","age":59,"sex":"男","address":"盐城市"});
db.student.insert({"name":"张八","age":69,"sex":"男","address":"盐城市"});
db.student.find({"name":"张三"}).pretty();
db.student.find({"sex":"男"}).pretty();
关系运算与之前最大的区别就是,在json结构中再定义一个json结构:
db.student.find({"age":{"$gte":59}}).pretty(); 年龄大于等于59的学生
db.student.find({"age":{"$lte":59}}).pretty(); 年龄小于等于59的学生
db.student.find({"age":{"$gte":59,"$lte":69}}).pretty(); 年龄大于等于59且小于等于69的学生
逻辑运算:
逻辑运算主要就是三种类型:与($and) 或($or) 非($not $nor)
除了or之外,and和not都可以用关系查询来进行;所以这里只列出“or”的写法
逻辑运算“or”,需要给语句设置数组的过滤条件(多个都用[])
db.student.find({"$or":[
{"age":{"$gt": 39}},
{"sex": "女"}]});
db.student.find({"$nor":[
{"age":{"$gt": 39}},
{"sex": "女"}]});
求模操作:
{"$mod" :[数字,余数]}
db.student.find({"age":{"$mod" : [3,0]}}); 被3整除
查询范围:
{"$in" :[数字,余数]}
db.student.find({"age":{"$in" : [19,69]}});
{"$nin" :[数字,余数]}
db.student.find({"age":{"$in" : [19,69]}});
数组查询:
集合参数:var colls = ["12","23"]
先存一部分的数组内容:
db.student.insert({"name":"李三","age":19,"sex":"男","address":"锡城市","course":["语文","体育","音乐"]});
db.student.insert({"name":"李四","age":29,"sex":"男","address":"锡城市","course":["语文","数学","体育"]});
db.student.insert({"name":"李五","age":39,"sex":"男","address":"锡城市","course":["语文","数学","音乐"]});
db.student.insert({"name":"李六","age":49,"sex":"女","address":"锡城市","course":["语文","体育","音乐"]});
db.student.insert({"name":"李七","age":59,"sex":"男","address":"锡城市","course":["语文","数学","体育","音乐"]});
db.student.insert({"name":"李八","age":69,"sex":"男","address":"锡城市","course":["数学","体育","音乐"]});
查询同时参加数组中语文呢和数学的学生:
db.student.find({"course":{"$all" : ["语文","数学"]}}).pretty();
也可以查询非数组字段:
db.student.find({"address":{"$all" : ["锡城市"]}}).pretty();
下标位置查询:
查询数组字段第三个下标为体育的数据”,(index从0开始)
db.student.find({"course.2":"体育"}).pretty();
查询参加4门课程的学生
db.student.find({"course":{"$size":4}}).pretty();
控制数组的返回数量,返回年龄19岁,且只显示前两门课程
db.student.find({"age":19 }, {"course":{"$slice":2}});
控制数组的返回数量,返回年龄19岁,且只显示后两门课程
db.student.find({"age":19 }, {"course":{"$slice":-2}});
控制数组的返回数量,返回年龄19岁,且跳过第一门,返回一门课程名
db.student.find({"age":19 }, {"course":{"$slice":[1,1]}});
嵌套集合运算:
先增加数据:增加家长信息
db.student.insert({"name":"高达三","age":19,"sex":"男","address":"锡城市","parents":[{"name":"高高达三-father" , "age":119,"job":"工人"},
{"name":"高高达三-mather" , "age":119,"job":"工人"}],"course":["语文","体育","音乐"]});
db.student.insert({"name":"高达四","age":29,"sex":"男","address":"锡城市","parents":[{"name":"高高达四-father" , "age":129,"job":"工人"},
{"name":"高高达四-mather" , "age":129,"job":"工人"}],"course":["语文","数学","体育"]});
db.student.insert({"name":"高达五","age":39,"sex":"男","address":"锡城市","parents":[{"name":"高高达五-father" , "age":139,"job":"工人"},
{"name":"高高达五-mather" , "age":139,"job":"工人"}],"course":["语文","数学","音乐"]});
db.student.insert({"name":"高达六","age":49,"sex":"女","address":"锡城市","parents":[{"name":"高高达六-father" , "age":149,"job":"工人"},
{"name":"高高达六-mather" , "age":149,"job":"工人"}],"course":["语文","体育","音乐"]});
db.student.insert({"name":"高达七","age":59,"sex":"男","address":"锡城市","parents":[{"name":"高高达七-father" , "age":159,"job":"工人"},
{"name":"高高达七-mather" , "age":159,"job":"工人"}],"course":["语文","数学","体育","音乐"]});
db.student.insert({"name":"高达八","age":69,"sex":"男","address":"锡城市","parents":[{"name":"高高达八-father" , "age":169,"job":"工人"},
{"name":"高高达八-mather" , "age":169,"job":"局长"}],"course":["数学","体育","音乐"]});
匹配(”$elemMatch“)家长是局长的学生,且学生年龄大于29岁:
db.student.find( {"$and" :[{"age":{"$gt" : 29}},
{"parents":{"$elemMatch":{"job":"局长"}}}]}).pretty();
匹配(”$elemMatch“)家长是局长的学生,或者学生为女性:
db.student.find({"$or":[{"sex":"女"},
{"parents":{"$elemMatch":{"job":"局长"}}}]}).pretty();
所以,由于这种查询条件比较麻烦,如果可能尽量别搞这么复杂的数据结构
判断某个字段是否存在:
"$exists":true/false
查询parents信息的数据:
db.student.find({"parents":{"$exists":true}}).pretty();
查询不具有course信息的数据:
db.student.find({"course":{"$exists":false}}).pretty();
条件过滤:(可以使用javascript查询,相当于将数据库存的json对象,转换成javascript,会使索引失效;所以数据量多的时候不用这个)
"$where"
db.student.find({"$where":"this.age>=69"}).pretty();
等同于:db.student.find(this.age>=69).pretty();
年龄在19到69之间:
db.student.find({"$and" :[{"$where":"this.age>19"},
{"$where":"this.age<69"}
]}).pretty();
年龄在小于等于19或者大于等于69:
db.student.find({"$or" :[{"$where":"this.age>=69"},
{"$where":"this.age<=19"}
]}).pretty();
模糊查询:(正则运算)
正则表达式:兼容Perl
基本语法:{key : 正则标记}
完整语法:{key :{"$regex":正则标记 , "$options":"选项"}}
查询name含有”高“的:不加双引号
db.student.find({"name":/高/});
等同于db.student.find({"name":{"$regex":/高/}});
查询name含有”高“的(不区分大小写):
db.student.find({"name":/高/i});
等同于db.student.find({"name":{"$regex":/高/i}});
查询数组数据:
db.student.find({"course":/语/i});
数据的排序:1 升序 ;-1 降序
db.student.find().sort({"age":-1});
自然排序:$natural按照数据修改时间来排序
db.student.find().sort({"$natural":-1});
--更新一条记录后发现跑到最上面了,所以是按照修改时间来进行排序的,如下
var deptDate = {
"name":"张四",
"age":19,
"sex":"男",
"address":"锡城市",
"course":["语文","体育","音乐"]
};
db.student.update({"name":"张四"},deptDate);
数据的分页显示:
skip(n):表示跨过n行;
limit(n):取出数据行的个数限制,显示N条;
跳5行,显示5行
db.student.find().skip(5).limit(5).sort({"$natural":-1});
数据更新操作:
save();
update();
1.update语法很麻烦:
db.集合.update(更新条件,新的数据,upsert, multi);
-upsert :如果数据存在则更新,不存在则插入;true 为增加 false 则不增加
-multi :表示是否只更新满足条件的第一条数据,如果设置为false,只更新第一个;如果是true,全更新
将年龄19岁的地址都改成北京:
db.student.update({"age":19},{"$set":{"address":"北京市"}},false,true);
查询:db.student.find({"address":"北京市"})
更新不存在的数据:
db.student.update({"age":1},{"$set":{"name":"不存在这个人","address":"北京市"}},true,true);
查询:db.student.find({"address":"北京市"}).sort({"$natural":-1})
Mongo的游标操作:
printjson输出Object型的对象;cursor.hasNext()的返回值是布尔类型
var cursor = db.student.find();
while(cursor.hasNext()){
var doc = cursor.next();
printjson(doc);
}
Mongo的索引:(重点)
默认:_id
新建索引:
联合索引:db.student.ensureIndex({"age":-1,"score":-1},{name: "age_-1_index"});
查询索引:
db.student.getIndexes();
查询执行计划:
db.students.find("age":19).explain();
强制索引:(hint 设置的索引顺序和建立的索引顺序一样)
db.students.find({"$or":[
{"age":{"$gt":19}},
{"score":{"$gt":60}}]}).hint({"age":-1,"score":-1}).explain();
删除索引:
单个删除:
db.student.dropIndexes({"age":-1,"score":-1});
批量全部删除:(删除非_id的索引,即自定义的)
db.student.dropIndexes();
db.student.ensureIndex({"age":-1,"score":-1},{name: "age_-1_index"});
MONGO的简单语法,新手实用的更多相关文章
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 编译原理简单语法分析器(first,follow,分析表)源码下载
编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...
- PHP简单语法
PHP简单语法 声明变量 $var_name="1"; $var_num=1; $var_bool=true; var_dump"函数可以将我们的变量的数据类型显示出来. ...
- T-Sql(一)简单语法
原文:T-Sql(一)简单语法 Sql Server是鄙人学习的第一种数据库,对Sql Server有一种特别的情感,下面就说一下Sql Server的简单语法,适用初学者. 1,创建数据库creat ...
- 10.1 ES6 的新增特性以及简单语法
ES6 的新增特性以及简单语法 let 和 const 模板字符串 箭头函数 对象单体模式 es6面向对象 模块化 let 和 const 之前一直用 var 来声明变量,ES6 新增 let 和 ...
- MYSQL(一) 简单语法
MYSQL(一) 简单语法 1.默认约束:mysql里面DEFAULT关键字后面是不用加括号的 --1.1 创建数据库 mysql> create database holly; Query O ...
- SQL优化:一些简单的又实用的SQL优化方案【转】
面试过程中,面试官有极高的频率会问道数据库的优化,SQL语句的优化,网上关于SQL优化的教程很多,但是鱼目混杂,显得有些杂乱不堪.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请 ...
- wget下载简单语法
文章参考:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/wget.html nasa wget 下载: https://disc.gs ...
- ES6简单语法
ES6 简单语法: 变量声明 ES5 var 声明变量为全局变量 会变量提升 ES6 let 声明的变量为块级变量 且不能重复声明 不存在变量提升 # {}一个大括号为一个作用域 ES6 const ...
随机推荐
- Freemarker入门
Freemarker入门 工程引入依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId& ...
- 【转载】Putty出现 Network error:Software caused connection abort
一.putty發生 network error 开始菜单进入regedit,尋找 HKEY_CURRENT_USER\Software\SimonTatham 并把这个目录下的子目录全部删除,删除前务 ...
- 深入理解python with语句
python的with语句相当于try.....finally,它是如何实现的呢?下面就结合范例和伪指令的实现来分析一下. with语句会汇编成:先调用with语句后面的表达式(open(...)), ...
- 设计模式、j2ee 部 分、EBJ 部 分
八. 软 件 工 程 与 设 计 模 式 1 .UML 方 面 标准建模语言 UML.用例图,静态图(包括类图.对象图和包图),行为图,交互图(顺序图,合作 图),实现图. 2 .j2ee 常 用 的 ...
- 01.VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...
- 浅析USB HID ReportDesc (HID报告描述符)
在USB中,USB Host是通过各种描述符来识别识别设备的,一般在设备枚举的过程将会获取有设备描述符/配置描述符/接口描述符/端点描述符/字符串描述符等 现在我们来介绍一下HID ReportDes ...
- beego生成 api 项目 && api 文档
目标 生成 api 项目,并且自动生成db的mapper.module等:同时生成api文档 操作步骤 1.生成 api 项目,并且自动生成db全表的映射 bee api [projectName] ...
- Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
权限问题,授权 给 root 所有sql 权限 mysql> grant all privileges on *.* to root@"%" identified by &q ...
- How to install Redis 3.2 on CentOS 6 and 7
What is Redis? Redis is a flexible open-source, key value data store, used as a database, cache and ...
- Others-阿里专家强琦:流式计算的系统设计和实现
阿里专家强琦:流式计算的系统设计和实现 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本 ...