MongoDB 笔记

MongoDB的优势:

  • 性能快
  • 查询语言丰富
  • 高可用
  • 横向扩展

和关系型数据库的比较

RDBMS MongoDB
Database Database
Table Collection
Tuple/Row Document
column Field
Table Join Embedded Documents
Primary Key Primary Key (Default key _id provided by mongodb itself)

使用一个database

use myDB

insert 会创建database和collection,如果它们不存在

use myNewDB

db.myNewCollection1.insert( { x: 1 } )

从collection中查询出所有documents:

db.COLLECTION_NAME.find()

find中可以带查询条件:

MongoDB 笔记_第1张图片
Paste_Image.png

and 查询条件:

>db.mycol.find(
   {
      $and: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

or 查询条件:

>db.mycol.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

find可以带第二个参数代表要显示哪些field,为1的key代表要显示的,0的key代表不显示

>db.COLLECTION_NAME.find({},{KEY:1})

limit()限制find返回结果的数量,skip()表示跳过结果的数量

db.COLLECTION_NAME.find().limit(NUMBER)

db.mycol.find({},{"title":1,_id:0}).limit(1).skip(1)

sort()将结果排序,1代表正序,-1代表逆序:

>db.COLLECTION_NAME.find().sort({KEY:1})

update document:

>db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA) //仅替换field

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}

>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}
>

save() document 不带id同insert,带id会将相同id的document进行替换

remove document:不带参数删除collection所有document,带参数删除特定document

db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

可以对document的field建立index,加速查询,1代表正序,-1代表逆序

db.mycol.ensureIndex({"title":1,"description":-1})

Aggregation and pipeline:

MongoDB 笔记_第2张图片
Paste_Image.png

MapReduce

MongoDB 笔记_第3张图片
Paste_Image.png

Replica Set

Replica Set是多个mongod的集合,每一个mongod称为node,有一个primary node和多个secondary node。所有写操作都在primary node上进行,然后同步到secondary node上。

MongoDB 笔记_第4张图片
Paste_Image.png

建立replica set

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0

连接上mongod
rs.initiate()
rs.add(HOST_NAME:PORT) //添加其他mongod,只能在primary node上操作

Shards

每个shard存储一部分数据,横向扩展,每个shard是一个Replica set

MongoDB 笔记_第5张图片
Paste_Image.png
  • Shard:存储数据,每个shard是一个replica set
  • Config Server: 存储数据在shard中的分布,Router通过查询config server来确定每个查询对应哪个shard,生产环境中有三个config server
  • Router:将客户端的查询分配到shard上,一个cluster可以有多个router。

你可能感兴趣的:(MongoDB 笔记)