MongoDB 笔记
2017-02-01 本文已影响22人
yangweigbh
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中可以带查询条件:

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:

MapReduce

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

建立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

- Shard:存储数据,每个shard是一个
replica set
- Config Server: 存储数据在shard中的分布,Router通过查询config server来确定每个查询对应哪个shard,生产环境中有三个config server
- Router:将客户端的查询分配到shard上,一个cluster可以有多个router。