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. Loadrunner:win10下Vuser 运行脚本通过,Controller执行用户并发报错

    现象:win7安装LR可以正常使用,将win7升级到win10之后,运行场景之后报错:Error (-81024): LR_VUG: The 'QTWeb' type is not supported ...

  2. secureCRT 设置字体时,显示字体较少问题

    控制面板->字体->选择字体,右击"显示".就可以再crt中看到了.

  3. NDK samples以及部分博客

    谷歌的ndk samples Android NDK samples with Android Studio http://developer.android.com/ndk 引用C/C++文件请参考 ...

  4. react-navigation设置navigationOptions中Static中使用 this 的方法

    使用react-navigation时,单页面设置navigationOptions中,进行Static中 调用this 中的方法或值时,需要做如下操作 static navigationOption ...

  5. element UI select 设定默认值

    要为select设定默认值,有两个步骤 1.数据中,声明一个变量param:该变量的值设为你想设定的select option中value 2.控件的 v-model 绑定 param 即可 < ...

  6. 本地项目 共享 到github仓库

    一.安装git客户端 Window下安装Git客户端. 二.配置Intellij idea中的Git/ GitHub 选择Github,填写Host.Login和Password,然后Test是否成功 ...

  7. 用 CentOS 7 打造合适的科研环境

    这篇博文记录了我用 CentOS 7 搭建 地震学科研环境 的过程,供我个人在未来重装系统时参考.对于其他地震学科研人员,也许有借鉴意义. 阅读须知: 本文适用于个人电脑,不适用于服务器: 不推荐刚接 ...

  8. mybatisGenerator自动生成pojo、dao、xml文件

    一.简介: mybatisGenerator是一款自动生成文件工具.本文使用idea2017.3.1来进行操作. 二.文件生成之后的项目结构: 三.开始生成步骤: 1.使用idea生成maven的结构 ...

  9. 公网Ip和私网ip

    IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP才能直接连接上网络,所以对于那些公司,学校, ...

  10. 强制停止ORACLE数据库

    操作环境 SuSE+Oracle11gR2 适用场景 shutdown immediate停止数据库失败 操作命令 1.kill掉oracle实例相关进程 2.清除oracle占用的共享内存段 ipc ...