这是我参与更文挑战的第26天,活动详情查看: 更文挑战
前言
什么是MongoDB?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。属于NoSQL。
什么是NoSQL?
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,NoSQL用于超大规模数据的存储。
MongoDB的特点非常多,这里主要讲几点:
1、首先是它可以支持的编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
2、可以设置任何属性的索引
3、Mongo支持丰富的查询表达式
4、Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
下载安装
管理工具
这里推荐RockMongo — 轻量级, 支持多国语言。
一、基本概念
在mongoDB中有许多概念和关系型数据库很不一样,需要先理解一下。
数据库:支持建立多个数据库,默认数据库为“db”。
集合:就类似关系型数据库中的表格,是文档的一个组合方式,集合可以插入不同格式和类型的数据。
比如将下面这些文档插入一个集合中。当有一个文档插入时,集合就创建了。
{"title":"cat"}
{"age":5,"name":"miaomiao"}
{"age":6,"name":"haha","color":"white"}
文档:就是一组key-value键值对格式的数据。例如:
{"age":5,"name":"miaomiao"}
字段:元数据,可以看作是文档中的数据。
和关系型数据库的对比:
RDBMS | MongoDB |
---|---|
数据库 | 数据库 |
表格 | 集合 |
行 | 文档 |
列 | 字段 |
表联合 | 嵌入文档 |
主键 | 主键 (MongoDB 提供了 key 为 _id ) |
二、MongoDB实操
创建数据库
use DATABASE_NAME
有存在数据库就切换过去,没有则自动创建数据库。
查看所有数据库
> show dbs
创建集合
db.createCollection(name, options)
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
> use test
switched to db test
> db.createCollection("animal")
{ "ok" : 1 }
插入文档
db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)
通过插入文档可以创建集合,集合名就是COLLECTION_NAME。
db.collection.insertOne() ,插入一个新文档。
>db.col.insert({ "title" : "dog", "age" : 5, "color" : "white", "name" : "wanwan" })
重要:文档中的键/值对是有序的,区分类型和大小写,不能有重复的键。
查询文档
find()方法。
db.collection.find(query, projection)
很简单,query就是指定查询条件,类似mysql中where后面的句子,projection是需要返回的键,类似mysql中select后面的内容。这里需要了解一些mongoDB的操作符。
相关操作符
用于比较的操作符
$gt---大于
$lt---小于
$gte---大于等于
$lte---小于等于
条件操作符
与(and)
>db.col.find({key1:value1, key2:value2}).pretty()
或(or)
>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
实例
现在有这样的文档数据。
> db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "dog", "age" : 5, "color" : "white", "name" : "wanwan" }
{ "_id" : ObjectId("56066542ade2f223420313a"), "title" : "cat", "age" : 7, "color" : "white", "name" : "miaomiao" }
{ "_id" : ObjectId("56242342342f21f36b0313a"), "title" : "pig", "age" : 2, "color" : "black", "name" : "hoho" }
下面是涵盖了大于,与和或的查询文档语句。
>db.col.find({"age": {$gt:5}, $or: [{"color": "white"},{"title": "pig"}]}).pretty()
查询结果:
{
"_id" : ObjectId("56066542ade2f223420313a"),
"title" : "cat",
"age" : "7",
"color" : "white",
"name" : "miaomiao"
}
排序
用sort() 方法来指定参数排序,1为升序,-1为降序。
>db.COLLECTION_NAME.find().sort({KEY:1})
对上述集合中的文档按照age降序。
>db.col.find({},{"title":1,_id:0}).sort({"age":-1})
结果:
{ "title" : "cat" }
{ "title" : "dog" }
{ "title" : "pig" }