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的简单语法,新手实用的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. 编译原理简单语法分析器(first,follow,分析表)源码下载

    编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...

  3. PHP简单语法

    PHP简单语法 声明变量 $var_name="1"; $var_num=1; $var_bool=true; var_dump"函数可以将我们的变量的数据类型显示出来. ...

  4. T-Sql(一)简单语法

    原文:T-Sql(一)简单语法 Sql Server是鄙人学习的第一种数据库,对Sql Server有一种特别的情感,下面就说一下Sql Server的简单语法,适用初学者. 1,创建数据库creat ...

  5. 10.1 ES6 的新增特性以及简单语法

    ES6 的新增特性以及简单语法  let 和 const 模板字符串 箭头函数 对象单体模式 es6面向对象 模块化  let 和 const 之前一直用 var 来声明变量,ES6 新增 let 和 ...

  6. MYSQL(一) 简单语法

    MYSQL(一) 简单语法 1.默认约束:mysql里面DEFAULT关键字后面是不用加括号的 --1.1 创建数据库 mysql> create database holly; Query O ...

  7. SQL优化:一些简单的又实用的SQL优化方案【转】

    面试过程中,面试官有极高的频率会问道数据库的优化,SQL语句的优化,网上关于SQL优化的教程很多,但是鱼目混杂,显得有些杂乱不堪.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请 ...

  8. wget下载简单语法

    文章参考:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/wget.html nasa wget 下载: https://disc.gs ...

  9. ES6简单语法

    ES6 简单语法: 变量声明 ES5 var 声明变量为全局变量 会变量提升 ES6 let 声明的变量为块级变量 且不能重复声明 不存在变量提升 # {}一个大括号为一个作用域 ES6 const ...

随机推荐

  1. 5.1_非监督学习之sckit-learn

    非监督学习之k-means K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型.算法执行的过程分为4个阶段. 1.首先,随机设K个特征空间内的点作为初始的聚类中心. ...

  2. python中 将你的名字转化成为二进制并输出

    1 name = "吴彦祖" 2 for i in name: 3 i_by = bytes(i, encoding = "utf-8") 4 for i_bi ...

  3. Archlinux下vmware-workstation中安装rhel5并通过桥接模式(bridge)上网

    首先安装vmware-workstation(从aur中) $yaourt vmware-workstation 安装linux-headers $pacman -S linux-headers 然后 ...

  4. Android 关于缓存的一些类

    在做项目的时候,难免需要将一些数据存储在手机中,之前用sqlite和sharepreference,但是使用起来不是很方便.最近用到了一些缓存的类,非常方便,特此记录下来. ASimpleCache ...

  5. HTML5 Canvas 小例子 旋转的时钟

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Linux MySQL 安装、远程访问和密码重置

    安装: yum install mysql yum install mysql-server yum install mysql-devel 设置开机启动: chkconfig -add mysqld ...

  7. html中控制Tab键的顺序

      在做项目中,需要控制html页面上登陆表单的按Tab键的顺序,代码如下: <tr>                         <td width="19%&quo ...

  8. 阅读程序 回答问题——FindTheNumber

    阅读程序 回答问题——FindTheNumber 阅读下面程序,请回答如下问题:问题1:这个程序要找的是符合什么条件的数?问题2:这样的数存在么?符合这一条件的最小的数是什么?问题3:在电脑上运行这一 ...

  9. Spring注解标签详解@Autowired @Qualifier等

    http://blog.csdn.net/wangsr4java/article/details/42777855 @Component.@Repository.@Service.@Controlle ...

  10. vue:图片切换动态显示

    <img :src="切换条件 ? require('xxx.png') : require('xxx.png')" />