10MongoDB

一.  介绍MongoDB

1. NoSQL

1)“NoSQL”⼀词最先于1998年被⽤于⼀个轻量级的关系数据库的名字html

随着web2.0的快速发展, NoSQL概念在2009年被提了出来程序员

2)NoSQL在2010年⻛⽣⽔起, 如今国内外众多⼤⼩⽹站, 如facebook、 google、 淘宝、 京东、 百度等, 都在使⽤nosql开发⾼性能的产品web

3)对于⼀名程序员来说, 使⽤nosql已经成为⼀条必备技能正则表达式

4)NoSQL最常⻅的解释是“non-relational”, “Not Only SQL”也被不少⼈接受, 指的是⾮关系型的数据库sql

2. 关系型与非关系型

 

 

3. 优点

1)易扩展: NoSQL数据库种类繁多, 可是⼀个共同的特色都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展mongodb

2)⼤数据量, ⾼性能: NoSQL数据库都具备⾮常⾼的读写性能, 尤为在⼤数据量下, 一样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单数据库

3)灵活的数据模型: NoSQL⽆需事先为要存储的数据建⽴字段, 随时能够存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 若是是⾮常⼤数据量的表, 增长字段简直就是⼀个噩梦json

二.  启动

在命令行中输入:数组

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()

四.数据类型

  1. Object ID: ⽂档ID
  2. String: 字符串, 最常⽤, 必须是有效的UTF-8
  3. Boolean: 存储⼀个布尔值, true或false
  4. Integer: 整数能够是32位或64位, 这取决于服务器
  5. Double: 存储浮点值
  6. Arrays: 数组或列表, 多个值存储到⼀个键
  7. Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
  8. Null: 存储Null值
  9. Timestamp: 时间戳, 表示从1970-1-1到如今的总秒数
  10. 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" 判断是否在某个范围内查询年龄为1八、 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

相关文章
相关标签/搜索