MongoDB的優(yōu)勢:
- 性能快
- 查詢語言豐富
- 高可用
- 橫向擴展
和關(guān)系型數(shù)據(jù)庫的比較
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 會創(chuàng)建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可以帶第二個參數(shù)代表要顯示哪些field,為1的key代表要顯示的孝常,0的key代表不顯示
>db.COLLECTION_NAME.find({},{KEY:1})
limit()
限制find返回結(jié)果的數(shù)量,skip()
表示跳過結(jié)果的數(shù)量
db.COLLECTION_NAME.find().limit(NUMBER)
db.mycol.find({},{"title":1,_id:0}).limit(1).skip(1)
sort()
將結(jié)果排序构灸,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:不帶參數(shù)刪除collection所有document,帶參數(shù)刪除特定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存儲一部分數(shù)據(jù)怠蹂,橫向擴展,每個shard是一個Replica set
- Shard:存儲數(shù)據(jù)城侧,每個shard是一個
replica set
- Config Server: 存儲數(shù)據(jù)在shard中的分布易遣,Router通過查詢config server來確定每個查詢對應(yīng)哪個shard嫌佑,生產(chǎn)環(huán)境中有三個config server
- Router:將客戶端的查詢分配到shard上,一個cluster可以有多個router屋摇。