MongoDB简介与实践

132 阅读3分钟

这是我参与更文挑战的第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主要是用来对数据进行批量处理和聚合操作。

下载安装

www.mongodb.com/download-ce…

管理工具

这里推荐RockMongo — 轻量级, 支持多国语言。

一、基本概念

在mongoDB中有许多概念和关系型数据库很不一样,需要先理解一下。

数据库:支持建立多个数据库,默认数据库为“db”。

集合:就类似关系型数据库中的表格,是文档的一个组合方式,集合可以插入不同格式和类型的数据。

比如将下面这些文档插入一个集合中。当有一个文档插入时,集合就创建了。

{"title":"cat"}
{"age":5,"name":"miaomiao"} 
{"age":6,"name":"haha","color":"white"}

文档:就是一组key-value键值对格式的数据。例如:

{"age":5,"name":"miaomiao"}

字段:元数据,可以看作是文档中的数据。

和关系型数据库的对比:

RDBMSMongoDB
数据库数据库
表格集合
文档
字段
表联合嵌入文档
主键主键 (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" }