10MongoDB
一. 介绍MongoDB
1. NoSQL
1)“NoSQL”⼀词最早于1998年被⽤于⼀个轻量级的关系数据库的名字
随着web2.0的快速发展, NoSQL概念在2009年被提了出来
2)NoSQL在2010年⻛⽣⽔起, 现在国内外众多⼤⼩⽹站, 如facebook、 google、 淘宝、 京东、 百度等, 都在使⽤nosql开发⾼性能的产品
3)对于⼀名程序员来讲, 使⽤nosql已经成为⼀条必备技能
4)NoSQL最常⻅的解释是“non-relational”, “Not Only SQL”也被很多⼈接受, 指的是⾮关系型的数据库
2. 关系型与非关系型
3. 优势
1)易扩展: NoSQL数据库种类繁多, 但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展
2)⼤数据量, ⾼性能: NoSQL数据库都具有⾮常⾼的读写性能, 尤其在⼤数据量下, 同样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单
3)灵活的数据模型: NoSQL⽆需事先为要存储的数据建⽴字段, 随时可以存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 如果是⾮常⼤数据量的表, 增加字段简直就是⼀个噩梦
二. 启动
在命令行中输入:
D:\MongoDB\bin\mongod --dbpath D:\MongoDB\data\db
然后点击mongo.exe输入命令
三. 基础命令
1. 关于database
1) 查看当前的数据库:db
2) 查看所有的数据库:show dbs /show databases
3) 切换数据库:use db_name
4) 删除当前的数据库:db.dropDatabase()
2. 关于集合
1)不手动创建集合:
向不存在的集合中第⼀次加⼊数据时, 集合会被创建出来
2)手动创建结合:
- db.createCollection(name,options)
- db.createCollection("stu")
- db.createCollection("sub", { capped : true, size : 10 } )
参数capped: 默认值为false表示不设置上限,值为true表示设置上限
参数size: 当capped值为true时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据覆盖, 单位为字节
3)查看集合:show collections
4)删除集合:db.集合名称.drop()
四.数据类型
- Object ID: ⽂档ID
- String: 字符串, 最常⽤, 必须是有效的UTF-8
- Boolean: 存储⼀个布尔值, true或false
- Integer: 整数可以是32位或64位, 这取决于服务器
- Double: 存储浮点值
- Arrays: 数组或列表, 多个值存储到⼀个键
- Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
- Null: 存储Null值
- Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
- Date: 存储当前⽇期或时间的UNIX时间格式
五.注意点
1)创建⽇期语句如下 :参数的格式为YYYY-MM-DD
new Date('2017-12-20')
2)每个⽂档都有⼀个属性, 为_id, 保证每个⽂档的唯⼀性
可以⾃⼰去设置_id插⼊⽂档,如果没有提供, 那么MongoDB为每个⽂档提供了⼀个独特的_id, 类型为objectID
3)objectID是⼀个12字节的⼗六进制数:
前4个字节为当前时间戳
接下来3个字节的机器ID
接下来的2个字节中MongoDB的服务进程id
最后3个字节是简单的增量值
六.数据的增删查改
1. 插入
db.集合名称.insert(document);插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
2. 保存
db.集合名称.save(document)
如果⽂档的_id已经存在则修改, 如果⽂档的_id不存在则添加
3. 更新
db.集合名称.update(<query> ,<update>,{multi: <boolean>})
- 参数query:查询条件
- 参数update:更新操作符
- 参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
db.stu.update({name:'hr'},{name:'mnc'}) 更新一条
db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条
db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部
注意:"multi update only works with $ operators"
4. 删除
db.集合名称.remove(<query>,{justOne: <boolean>})
参数query:可选,删除的⽂档的条件
参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
5. 查询
1)⽅法find(): 查询
db.集合名称.find({条件⽂档})
2)⽅法findOne():查询,只返回第⼀个
db.集合名称.findOne({条件⽂档})
3)⽅法pretty(): 将结果格式化
db.集合名称.find({条件⽂档}).pretty()
七.运算符
1. 比较运算符
- 等于: 默认是等于判断, 没有运算符
- ⼩于:$lt (less than)
- ⼩于等于:$lte (less than equal)
- ⼤于:$gt (greater than)
- ⼤于等于:$gte
- 不等于:$ne
db.stu.find({age:{$gte:18}})
2. 逻辑运算符
- and:在json中写多个条件即可
查询年龄⼤于或等于18, 并且性别为true的学⽣
db.stu.find({age:{$gte:18},gender:true})
- or:使⽤$or, 值为数组, 数组中每个元素为json
查询年龄⼤于18, 或性别为false的学⽣
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
查询年龄⼤于18或性别为男⽣, 并且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
3. 范围运算符
使⽤"$in", "$nin" 判断是否在某个范围内查询年龄为18、 28的学⽣
db.stu.find({age:{$in:[18,28]}})
4. 正则表达式
使⽤//或$regex编写正则表达式查询姓⻩的学⽣
db.stu.find({name:/^⻩/})
db.stu.find({name:{$regex:'^⻩'}})
八.limit和skip
1. limit
限制获取数据的条数
db.集合名称.find().limit(NUMBER)
2. skip
跳过的数据条数
db.集合名称.find().skip(NUMBER
九.投影
在查询到的返回结果中, 只选择必要的字段
- 参数为字段与值,值为1表示显示,值为0不显
- 特殊: 对于_id列默认是显示的, 如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
十.排序和消除重复
1) 排序
db.collection.find({}).sort({age:1})
2)distinct
db.collection.distinct("gender",{age:{$gt:18}}) 返回数组
十一.聚合和管道
1. 聚合
1)
db.collection.aggregate({$group : {_id : "$字段", num_tutorial : {$sum : 1}}})
2) 表达式
$sum: 计算总和, $sum:1 表示以⼀倍计数
$avg: 计算平均值
$min: 获取最⼩值
$max: 获取最⼤值
$push: 在结果⽂档中插⼊值到⼀个数组中
$first: 根据资源⽂档的排序获取第⼀个⽂档数据
$last: 根据资源⽂档的排序获取最后⼀个⽂档数据
2.管道
2.1 常用操作
l $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
l $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
l $limit:用来限制MongoDB聚合管道返回的文档数。
l $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
l $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
l $group:将集合中的文档分组,可用于统计结果。
l $sort:将输入文档排序后输出。
l $geoNear:输出接近某一地理位置的有序文档。
2.2 操作实例
1)$project
db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});
默认情况下_id字段是被包含的,如果要想不包含_id的话可以将id置为0
2)$match
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
3) $skip
db.article.aggregate(
{ $skip : 5 });
4)$sort
db.collection.aggregate($sort:{age:1})
5) $unwind
db.集合名称.aggregate({$unwind:'$字段名称'})
十二. 索引
1)在默认情况下创建的索引均不是唯一索引。
l 创建唯一索引:
- db.t1.ensureIndex({"name":1},{"unique":true})
l 创建唯一索引并消除重复:
- db.t1.ensureIndex({"name":1},{"unique":true,"dropDups":true})
2)建立联合索引(什么时候需要联合索引):
db.t1.ensureIndex({name:1,age:1})
3)查看当前集合的所有索引:
db.t1.getIndexes()
4)删除索引:
db.t1.dropIndex('索引名称')
十三. 备份和恢复
1. 备份
1) 打开mongodb服务之后,在命令提示符进入bin目录,输入mongodump
2)mongodump -h dbhost -d dbname -o dbdirectory
-h: 服务器地址, 也可以指定端⼝号
-d: 需要备份的数据库名称
-o: 备份的数据存放位置, 此⽬录中存放着备份出来的数据
mongodump -h 127.0.01:27017 -d test -o D:\某某文件夹
2. 恢复
恢复语法:
mongorestore -h dbhost -d dbname --dir dbdirectory
-h: 服务器地址
-d: 需要恢复的数据库实例
--dir: 备份数据所在位置
1) 进入bin目录,执行mongorestore -h 127.0.0.1:27017 -d test --dir D:\...
2) mongorestore
十四. Windows下安装mongodb
详情戳:
http://www.runoob.com/mongodb/mongodb-window-install.html
10MongoDB的更多相关文章
- 10-mongodb启动错误
1.error信息 python@ubuntu:~$ mongod --22T17:: I CONTROL [initandlisten] MongoDB starting : pid= port= ...
- [整理]MongoDB 经常使用命令总结
MongoDB 经常使用命令总结 简单的的增删改查数据 在查询结果中指定显示或者不显示某个字段 比如,我们希望在 lessons 集合中查找全部数据,可是不希望在返回结果中包括 slides 字段:由 ...
- MongoDB改动、删除文档的域属性实例
MongoDB改动.删除文档的域属性实例 在站点的开发中,可能最初的设计不合理.或者后期业务的变更,会造成文档结构会有些无用的属性.须要去删除或改动.因为MongoDB 是无 Schema 的,不像关 ...
- JavaEE在职加薪课好客租房项目实战视频教程
JavaEE在职加薪课好客租房项目实战视频教程课程介绍: 本课程采用SOA架构思想进行设计,基于目前主流后端技术框架SpringBoot.SpringMVC.Mybaits.Dubbo等来 ...
随机推荐
- 洛谷 - P5000 - Hillwer编码 - 高精度
https://www.luogu.org/problemnew/show/P5000 第一次写一个正经的高精度题. 很明显ASCII码的乘积绝对是溢出的. 那么直接上Java.正好学一手Java的字 ...
- 测试人员,今天再不懂BDD就晚了!
首先,测试人员应该参与软件开发的全流程,这一点已经是软件行业的共识了. 其次,新技术.新框架.新思路不断涌现的今天,测试人员除了传统的功能测试,也要不断与时俱进,主动承担起自动化测试.性能测试等.除了 ...
- hdu 3461 Code Lock 并查集(有点难想到)★★
#include<stdio.h> #include<math.h> ]; int count; #define mod 1000000007 int find(int x) ...
- AdventureWorks2012.mdf的使用
AdventureWorks2012.mdf的使用,在数据库管理器界面中,右击数据库,然后附加,然后选择好AdventureWorks2012.mdf,然后删掉log,然后确定即可.
- easyUI Uncaught TypeError: Cannot read property 'length' of undefined
dataGrid json 封装数据格式为 List<Object> 格式
- 跟我一起玩Win32开发(1):关于C++的几个要点
我不知道各位,一提起C++,第一感觉是什么?而据俺的观察,许多人几乎成了“谈C色变”.不管是C还是C++,一直以来都被很多人视为相当难学的玩意儿,幸好只是一个C++,没有C--,C**和C//,不然, ...
- CodeForces - 816C Karen and Game(简单模拟)
Problem Description On the way to school, Karen became fixated on the puzzle game on her phone! The ...
- 关于html/css的路径问题
非原创,转自:http://blog.sina.com.cn/s/blog_6c21f6480101cb33.html [问题描述]: 比如你有Web项目solo,假如目录结构如下: 在cy.css中 ...
- 474 Ones and Zeroes 一和零
在计算机界中,我们总是追求用有限的资源获取最大的收益.现在,假设你分别支配着 m 个 0 和 n 个 1.另外,还有一个仅包含 0 和 1 字符串的数组.你的任务是使用给定的 m 个 0 和 n 个 ...
- CentOS 7.2最小化安装没有ifconfig命令,使用yum provides ifconfig找不到相关的包
[root@sishen yum.repos.d]# yum provides ifconfig Loaded plugins: fastestmirror Loading mirror speeds ...