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. Java序列化对象-字符串转换

    package com.test; import com.alibaba.fastjson.JSON; import org.junit.Test; import java.io.ByteArrayI ...

  2. putty使用秘钥对登录百度云系统全过程

    使用秘钥对登录百度云系统全过程 1在百度云生成秘钥对 并且绑定要登录的IP 1)创建 2) 创建成功后,会自动下载私钥到本地 3)绑定 4)绑定完毕 2把下载到本地的私钥使用putty key gen ...

  3. Maven父工程

    1.创建Maven工程时 Packaging 选项为 pom 2.父工程目录结构只有pom.xml(父工程不进行编码) 3.需要的依赖信息在父工程中定义,子模块继承 5.将各个子模块聚合到一起 6.将 ...

  4. 【ASP.NET 进阶】TreeView控件学习

    这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基本了解了下TreeView控件. TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等. 下面看代码吧: 1.效果图 2.静 ...

  5. url查询参数解析

    url查询参数解析 1.获取url的各部分值 举例http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window.location.href(设置或获取整个 UR ...

  6. VSFTP 配置虚拟用户

    虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源.所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性. 在VSF ...

  7. list<T>中的按特定顺序排序

    前段时间有个任务,就是把参数要按特定顺序排序,就是要是在一张大的参数表中,只选取,2,5,12,9,13,10 这几个参数,并按上述顺序进行排序. 假设这个参数在一个类中.例如: 上述参数序列就存在P ...

  8. Linux命令:ssh

    ssh介绍 ssh用法 ssh帮助 SSH() BSD General Commands Manual SSH() NAME ssh — OpenSSH SSH client (remote logi ...

  9. 如何安全的在不同工程间安全地迁移asset数据?三种方法

    答:1.将Assets和Library一起迁移2.导出包package3.用unity自带的assets Server功能

  10. TypeScript set get

    private _id:number; public get id():number{ return this._id; } public set id(value:number){ this._id ...