0.json基本數(shù)據(jù)格式
JSON 對(duì)象在花括號(hào)中書寫:
{ "firstName":"John" , "lastName":"Doe" }
JSON 數(shù)組在方括號(hào)中書寫:
數(shù)組可包含多個(gè)對(duì)象:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
在上面的例子中,對(duì)象 "employees" 是包含三個(gè)對(duì)象的數(shù)組。每個(gè)對(duì)象代表一條關(guān)于某人(有姓和名)的記錄。
1、安裝配置
下載解壓到目錄,新建data目錄存放數(shù)據(jù)庫(kù),log存放日志
創(chuàng)建個(gè)配置文件mongodb.conf
port=10001
dbpath=/usr/lib64/mongodb/data/db
logpath=/usr/lib64/mongodb/data/log/mongodb.log
logappend=true
開啟server:./bin/mongod -f mongod.conf
開啟client:./bin/mongo host:port
2、創(chuàng)建用戶
3.0版本
use admin
db.createUser({user:"yearnfar",pwd:"123456",roles:['root']})
修改密碼
db.changeUserPassword("username","newpassword")
查看用戶信息
db.runCommand({userInfo:"kangw"})
驗(yàn)證用戶
db.auth("username","pwd")
3、與Mql對(duì)照
MySQL
|
MongoDB
|
說明
|
mysqld
|
mongod
|
服務(wù)器守護(hù)進(jìn)程
|
mysql
|
mongo
|
客戶端工具
|
mysqldump
|
mongodump
|
邏輯備份工具
|
mysql
|
mongorestore
|
邏輯恢復(fù)工具
|
|
db.repairDatabase()
|
修復(fù)數(shù)據(jù)庫(kù)
|
mysqldump
|
mongoexport
|
數(shù)據(jù)導(dǎo)出工具
|
source
|
mongoimport
|
數(shù)據(jù)導(dǎo)入工具
|
grant * privileges on *.* to …
|
Db.addUser()【老版本】
Db.auth()
|
新建用戶并權(quán)限
|
show databases
|
show dbs
|
顯示庫(kù)列表
|
Show tables
|
Show collections
|
顯示表列表
|
Show slave status
|
Rs.status
|
查詢主從狀態(tài)
|
Create table users(a int, b int)
|
db.createCollection("mycoll", {capped:true,
size:100000}) 另:可隱式創(chuàng)建表。
|
創(chuàng)建表
|
Create INDEX idxname ON users(name)
|
db.users.ensureIndex({name:1})
|
創(chuàng)建索引
|
Create INDEX idxname ON users(name,ts DESC)
|
db.users.ensureIndex({name:1,ts:-1})
|
創(chuàng)建索引
|
Insert into users values(1, 1)
|
db.users.insert({a:1, b:1})
|
插入記錄
|
Select a, b from users
|
db.users.find({},{a:1, b:1})
|
查詢表
|
Select * from users
|
db.users.find()
|
查詢表
|
Select * from users where age=33
|
db.users.find({age:33})
|
條件查詢
|
Select a, b from users where age=33
|
db.users.find({age:33},{a:1, b:1})
|
條件查詢
|
select * from users where age<33
|
db.users.find({'age':{$lt:33}})
|
條件查詢
|
select * from users where age>33 and age<=40
|
db.users.find({'age':{gt:33,lte:40}})
|
條件查詢
|
select * from users where a=1 and b='q'
|
db.users.find({a:1,b:'q'})
|
條件查詢
|
select * from users where a=1 or b=2
|
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
|
條件查詢
|
select * from users limit 1
|
db.users.findOne()
|
條件查詢
|
select * from users where name like "%Joe%"
|
db.users.find({name:/Joe/})
|
模糊查詢
|
select * from users where name like "Joe%"
|
db.users.find({name:/^Joe/})
|
模糊查詢
|
select count(1) from users
|
Db.users.count()
|
獲取表記錄數(shù)
|
select count(1) from users where age>30
|
db.users.find({age: {'$gt': 30}}).count()
|
獲取表記錄數(shù)
|
select DISTINCT last_name from users
|
db.users.distinct('last_name')
|
去掉重復(fù)值
|
select * from users ORDER BY name
|
db.users.find().sort({name:-1})
|
排序
|
select * from users ORDER BY name DESC
|
db.users.find().sort({name:-1})
|
排序
|
EXPLAIN select * from users where z=3
|
db.users.find({z:3}).explain()
|
獲取存儲(chǔ)路徑
|
update users set a=1 where b='q'
|
db.users.update({b:'q'}, {$set:{a:1}}, false, true)
|
更新記錄
|
update users set a=a+2 where b='q'
|
db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
|
更新記錄
|
delete from users where z="abc"
|
db.users.remove({z:'abc'})
|
刪除記錄
|
|
db. users.remove()
|
刪除所有的記錄
|
drop database IF EXISTS test;
|
use test
db.dropDatabase()
|
刪除數(shù)據(jù)庫(kù)
|
drop table IF EXISTS test;
|
db.mytable.drop()
|
刪除表/collection
|
|
db.addUser(‘test’, ’test’)
|
添加用戶
readOnly-->false
|
|
db.addUser(‘test’, ’test’, true)
|
添加用戶
readOnly-->true
|
|
db.addUser("test","test222")
|
更改密碼
|
|
db.system.users.remove({user:"test"})
或者db.removeUser('test')
|
刪除用戶
|
|
use admin
|
超級(jí)用戶
|
|
db.auth(‘test’, ‘test’)
|
用戶授權(quán)
|
|
db.system.users.find()
|
查看用戶列表
|
|
show users
|
查看所有用戶
|
|
db.printCollectionStats()
|
查看各collection的狀態(tài)
|
|
db.printReplicationInfo()
|
查看主從復(fù)制狀態(tài)
|
|
show profile
|
查看profiling
|
|
db.copyDatabase('mail_addr','mail_addr_tmp')
|
拷貝數(shù)據(jù)庫(kù)
|
|
db.users.dataSize()
|
查看collection數(shù)據(jù)的大小
|
|
db. users.totalIndexSize()
|
查詢索引的大小
|
4.插入數(shù)據(jù)
db.table.insert(....)
db.table.insert({
"name":"zhangsan",
"age" : 20,
"like" : [
"apple","orange","phone"
]
})
5.update更新數(shù)據(jù)
db.collection.update(<query>, <update>,{
upsert:<boolean>,
multi:<boolean>,
writeConcern:<document>})
參數(shù)說明:
- query : update的查詢條件,類似sql update查詢內(nèi)where后面的。
- update : update的對(duì)象和一些更新的操作符(如,inc...)等,也可以理解為sql update查詢內(nèi)set后面的
- upsert : 可選,這個(gè)參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。
- multi : 可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來(lái)多條記錄全部更新。
- writeConcern :可選,拋出異常的級(jí)別。
db.user.update(
{
"name":"zhangsan" //where
},
{ //set age=age+2 , heigh=200
$inc:{"age":2},
$set:{"heigh":200}
},
{ //更新符合條件的全部
"multi":true
}
)
save()方法,替換已有數(shù)據(jù)
db.collection.save(<document>,{
writeConcern:<document>})
db.col.save({"_id":ObjectId("56064f89ade2f21f36b03136"),"title":"MongoDB","description":"MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)","by":"Runoob","url":"http://www.runoob.com","tags":["mongodb","NoSQL"],"likes":110})
7.刪除數(shù)據(jù)
db.collection.remove(<query>,<justOne> //設(shè)置刪除的條數(shù),沒有就是全部)
2.6版本后
db.collection.remove(<query>,{
justOne:<boolean>,
writeConcern:<document>})
參數(shù)說明:
- query :(可選)刪除的文檔的條件。
- justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個(gè)文檔。
- writeConcern :(可選)拋出異常的級(jí)別。
db.table.remove(
{"name":"zhaosi"}, //where條件
1 //只刪除1條,無(wú)則是全部
)
8.查詢數(shù)據(jù)
db.col.find({條件},{要獲取的字段})
db.col.find().pretty()
格式化顯示數(shù)據(jù)
db.col.findOne().pretty()
只顯示一條
mongodb中的內(nèi)置關(guān)鍵變量
Conditional Operators : $slice //切片
Conditional Operators : $lt <, $lte <=, $gt >, $gte >=
Conditional Operator : $ne //不等于
Conditional Operator : $in //屬于
Conditional Operator : $nin //不屬于
Conditional Operator : $mod //取模運(yùn)算
Conditional Operator: $all //全部屬于
Conditional Operator : $size //數(shù)量
Conditional Operator: $exists //字段存在
Conditional Operator: $type //字段類型
Conditional Operator: $or // 或
Regular Expressions //正則表達(dá)式
Value in an Array // 數(shù)組中的值
Conditional Operator: $elemMatch //要素符合
Value in an Embedded Object //內(nèi)嵌對(duì)象中的值
Meta operator: $not //不是
Javascript Expressions and $where //
sort() //排序
limit() //限制取數(shù)據(jù)條數(shù)
skip() //跳過一定數(shù)值開始取
snapshot() //
count() // 數(shù)量
group() //分組
db.col.find({"by":"菜鳥教程","title":"MongoDB 教程"}).pretty()
WHERE by='菜鳥教程' AND title='MongoDB 教程'
db.col.find({$or:[{"by":"菜鳥教程"},{"title":"MongoDB 教程"}]}).pretty()
WHERE by='菜鳥教程' or title='MongoDB 教程'
db.col.find({"likes":{$gt:50}, $or:[{"by":"菜鳥教程"},{"title":"MongoDB 教程"}]}).pretty()
'where likes>50 AND (by = '菜鳥教程' OR title = 'MongoDB 教程')'
db.col.find({likes :{$lt :200, $gt :100}})
Select*from col where likes>100 AND likes<200;
table.find({"name":{"$in":["abeen","ab","b"]}})
select * from table where name in (abeen,ab,b)
table.find({"age":{"$mod":[10,1]}})
查找age除10模等于1的
table.find({"name":{"$size": 6}}
取name元素?cái)?shù)和size數(shù)相同的信息 table.find({"name":{"exists": True}}
取name存在的信息
table.find({"name":{"$type": 2}}
name類型為字符串的
type對(duì)應(yīng)該類型表如下:
table.find({"name": {"$regex": r".*ee.*"}})
利用正則查詢
table.find({"info.name": "abeen"})
查找內(nèi)部對(duì)象info的name等于abeen的信息
table.find({"query":"name":"abeen","orderby": { "age": 1/-1 }})
select *from table where name="abeen" order by age asc/desc
query?查詢類似于sql中的 whereorderby - 排序{x:1},1為升序 -1為降序
db.table.find().limit(10).skip(4)
select * from table limit 4,10
9.創(chuàng)建索引
db.table.ensureindex({key:1/-1}, {.其他選項(xiàng)} ,....,......);
1升序 -1降序
10.聚合
db.table.aggregate()
一、基礎(chǔ)
1.文檔
文檔是mongodb的核心概念,類型與關(guān)系型數(shù)據(jù)庫(kù)中的行。
多個(gè)鍵值有序的放置在一起便是文檔。
mongodb不但區(qū)分類型,也區(qū)分大小寫。
{ “foo":3 }
{ "foo":'3' }
{ "Foo":3 }
三個(gè)不同文檔
文檔中不能有重復(fù)的鍵
{ "Foo":3,“Foo":3 }
2.集合
集合就是一組文檔。類似關(guān)系型數(shù)據(jù)庫(kù)中的表
集合是無(wú)模式的,這意味著一個(gè)集合里面的文檔可以是各式各樣的。
{ "Foo":3 }
{ "Foo":3 ,“age":20}
3. db.getCollection("集合名稱")
獲取某個(gè)集合
db.getCollection("user").find()
因?yàn)槟承┘系拿Q是關(guān)鍵詞,或者是組合字符串得到的,可以用這個(gè)函數(shù)來(lái)操作
4.支持的數(shù)據(jù)類型
null
|
{"x":null}
|
布爾
|
{"x":true}
|
32位整數(shù)
|
shell中這個(gè)類型不可用,在js中僅支持64位浮點(diǎn)數(shù),所以32位整數(shù)會(huì)被自動(dòng)轉(zhuǎn)換
|
64位整數(shù)
|
shell也不支持這個(gè)類型,shell會(huì)使用一個(gè)特殊的內(nèi)嵌文檔來(lái)顯示64位整數(shù)。
|
64位浮點(diǎn)數(shù)
|
{"x":3.14},{"x":3}這個(gè)也是浮點(diǎn)數(shù)。shell中的數(shù)字都是這種類型的。
|
字符串
|
{"x":"xxxx"}
|
符號(hào)
|
shell中也不支持這種類型,會(huì)把此轉(zhuǎn)換成字符串
|
對(duì)象id
|
{"x":objectId()}
|
日期
|
{"x":new Date()}
|
正則表達(dá)式
|
{"x": /foobar/iU}
|
代碼
|
{"x": function(){ alert('a')}}
|
二進(jìn)制數(shù)據(jù) |
二進(jìn)制數(shù)據(jù)可以由任意字節(jié)的串組成,不過shell中無(wú)法使用
|
最大值
|
bson包括一個(gè)特殊類型,表示可能的最大值
|
最小值
|
bson包括一個(gè)特殊類型,表示可能的最小值 |
未定義
|
{"x":undefined}
|
數(shù)組 |
{"x":["a","b"]}
|
內(nèi)嵌別的文檔 |
{"x":{"foo":"bar"}}
|
5.修改
db.user.update({條件},{修改內(nèi)容})
{ "_id" : ObjectId("5642ac0aca1b66a47448b8cf"), "name" : "zhangsan" }
5.1 //沒有變量修飾,會(huì)直接替換內(nèi)容
db.user.update(
{"name":"kang"},
{"info":{"age":20}}
)
{ "_id" : ObjectId("5642abecca1b66a47448b8ce"), "name" : "kangkang", "info" : { "age" : 22 } }
5.2//有系統(tǒng)變量
db.user.update(
{"name":"kang"},
{$set:{"age":20}} //更新字段,如果鍵不存在,則創(chuàng)建它。
)
{ "_id" : ObjectId("5642ac0aca1b66a47448b8cf"), "name" : "zhangsan", "info" : { "age" : 22 } , "age" : 20}
5.2.1
db.user.update(
{"name":"kang"},
{$unset:{"age":1}} //刪除指定的字段
)
{ "_id" : ObjectId("5642ac0aca1b66a47448b8cf"), "name" : "zhangsan", "info" : { "age" : 22 } }
5.2.2
$inc 字段自增
5.2.3
如果字段值為數(shù)組
db.user.update(
{"name":"kang"},
{$push:{"like":"apple"}} //指定的鍵存在,則會(huì)向數(shù)組末尾加入一個(gè)元素。沒有則創(chuàng)建一個(gè)新的數(shù)組
)
db.user.update(
{"name":"kang"},
{$push:{"like":"orange"}}
)
{ "_id" : ObjectId("5642ac0aca1b66a47448b8cf"), "name" : "zhangsan", "info" : { "age" : 22 }, "like":["apple","orange"] }
5.2.4
db.user.update(
{"name":"kang"},
{$addToSet:{"like":"apple"}} //插入到數(shù)組中,存在則忽略,可以避免值出現(xiàn)重復(fù)
)
{ "_id" : ObjectId("5642ac0aca1b66a47448b8cf"), "name" : "zhangsan", "info" : { "age" : 22 }, "like":["apple","orange"] }
操作字段數(shù)組中的值,可以這樣db.user.update({"name":"kangkang"}, {$set:{"like.0","aaa"}})
定位符 $
6.查詢
db.user.find({條件},{要顯示的字段})
db.user.find({"name":"kang"}, {"age":1,"_id":0})
字段:值為1顯示
_id字段默認(rèn)會(huì)顯示出來(lái),值為0則不顯示
and查詢
db.user.find(
{
"age" : { "gt":20,"lt":30 }
}
)
where age>20 and age<30
in查詢
db.user.find(
{
"age": { "$in": [1,2,3,4] }
}
)
where age in (1,2,3,4)
or查詢
db.user.find(
{
"or":[ {"name":"kang"}, {"age":{"lt":20}} ]
}
)
where name="kang" or age<20
null匹配
null值不僅會(huì)匹配自身,如果其他條文檔(行)中不存在此字段,也會(huì)被匹配,所以在查詢的時(shí)候,還要判斷這個(gè)是否存在
db.user.find(
{
"from":{ "$in":[null], "$exists":true }
}
)
正則查詢
db.user.find(
{
"name":/kang/i //i忽略大小寫
}
)
數(shù)組查詢
{ "_id" : ObjectId("564590848cd6fe155ab16ac7"), "fruit" : [ "apple", "banana", "peach" ] }
{ "_id" : ObjectId("564591518cd6fe155ab16ac8"), "fruit" : [ "cherry", "orange", "apple" ] }
查詢有apple的
db.user.find(
{
"fruit":"apple"
}
)
查詢有apple和banana
db.user.find({
"fruit": { "$all" : [ "apple","banana" ] }
})
查詢數(shù)組長(zhǎng)度等于3的
db.user.find({
"fruit": { "$size" : 3 }
})
內(nèi)嵌文檔查詢
db.comment.find().pretty()
{
"_id" : ObjectId("5645978472a63ff99ddd6917"),
"article" : 1,
"comment" : [
{
"author" : "zhangsan",
"score" : 1,
"comment" : "zhangsanzhangsan"
},
{
"author" : "zhaosi",
"score" : 3,
"comment" : "zhaosi44444"
},
{
"author" : "zhaosi",
"score" : 1,
"comment" : "55555555555"
},
{
"author" : "zhaosi",
"score" : 2,
"comment" : 6666666666666
}
]
}
查author=zhangsan, score=1的評(píng)論
db.comment.find({"comment":{"$elemMatch":{"author":"zhangsan","score":1}}}).pretty()
skip().limit()
如果文檔很多,會(huì)導(dǎo)致速度很慢,因此可以使用sort().limit()代替
也就是說先排序,再limit
隨機(jī)獲取一條記錄
通常的做法:
先計(jì)算總條數(shù),然后用隨機(jī)函數(shù)產(chǎn)生一個(gè)這個(gè)之間的數(shù),再skip()取
現(xiàn)在可以在插入數(shù)據(jù)的時(shí)候,加一個(gè)隨機(jī)數(shù)的字段,然后用findOne()
高級(jí)查詢
普通查詢
var cursor = db.foo.find({"foo":"bar"}).sort({"age":-1})
實(shí)際情況不是將{“foo”:"bar"}作為查詢直接發(fā)給數(shù)據(jù)庫(kù),而是將查詢包裝在一個(gè)更大的文檔中。shell會(huì)把查詢從{“foo”:"bar"}轉(zhuǎn)換成
{
"$query" : {"foo":"bar"},
"$orderby" : {"age": -1}
}
索引
絕大多數(shù),優(yōu)化mysql索引的技巧也同樣適用于MongoDB
創(chuàng)建索引:
db.user.ensureIndex(
{鍵:方向},
{"name":索引名稱}
)
db.user.ensureIndex({"age":1,“year":-1},{"name":"age_year"})
對(duì)于同一個(gè)集合,同樣的索引只需要?jiǎng)?chuàng)建一次。反復(fù)創(chuàng)建是徒勞的
值為1或-1,與sort的作用一樣,指定方向,如果索引只有一個(gè)鍵,則方向無(wú)關(guān)緊要。
只有使用索引前部的查詢才能使用該索引。
為排序做索引
隨著集合的增長(zhǎng),需要針對(duì)查詢中大量的排序做索引,如果對(duì)沒有索引的鍵調(diào)用sort,MongoDB需要將所有數(shù)據(jù)提取到內(nèi)存來(lái)排序,一旦集合大到不能再內(nèi)存中排序,MongoDB就會(huì)報(bào)錯(cuò)。
按照排序來(lái)索引以便讓MongoDB按照順序提取數(shù)據(jù),這樣就能排序大規(guī)模數(shù)據(jù),而不必?fù)?dān)心用光內(nèi)存。
創(chuàng)建唯一索引
db.user.ensureIndex(
{"name":1},
{"unique":true}
)
如果插入了多個(gè)缺少該索引鍵的文檔,則由于文檔包含null值而導(dǎo)致插入失敗
當(dāng)為已有的集合創(chuàng)建索引,可能有些值已經(jīng)有重復(fù)了,那么索引創(chuàng)建失敗。
有時(shí)間希望將所有包含重復(fù)值的文檔都刪除掉。dropDups可以保留發(fā)現(xiàn)的第一個(gè)文檔,而刪除接下來(lái)的有重復(fù)值的文檔。
db.user.ensureIndex(
{"name":1},
{"unique":true, "dropDups":true},
{"background" : true}
)
background 可以使這個(gè)過程在后臺(tái)完成,同時(shí)正常處理請(qǐng)求,要是沒有,則數(shù)據(jù)庫(kù)會(huì)阻塞建立索引期間的所有請(qǐng)求。
刪除索引
db.runCommand(
{"dropIndexes":表名},
{"index":索引名稱} //為*表示刪除全部索引
)
explain()分析
"cursor" : "BasiceCursor"
這說明查詢沒有使用索引
"nscanned":64
查了多少給文檔
"n":64
返回的文檔數(shù)量
"millis":0
毫秒數(shù),查詢時(shí)間
聚合查詢
可以用來(lái)計(jì)算集合中文檔的個(gè)數(shù),復(fù)雜的可以利用MapReduce做復(fù)雜數(shù)據(jù)分析
db.foo.count()
返回集合中的總條數(shù)
distinct
主從復(fù)制
1.最基本的設(shè)置方式建立一個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn)。
開啟主服務(wù)
mongod --dbpath db/ --port 27001 --master
開啟從服務(wù)
mongod --dbpath db/ --port 27002 --slave --source 127.0.0.1:27001
如果過多個(gè)節(jié)點(diǎn)對(duì)單個(gè)主節(jié)點(diǎn)發(fā)起查詢,會(huì)讓其吃不消,所以實(shí)際中,不超過12個(gè)從節(jié)點(diǎn)
2.選項(xiàng):
--only
在從節(jié)點(diǎn)上指定只復(fù)制特定某個(gè)數(shù)據(jù)庫(kù),默認(rèn)復(fù)制所有的數(shù)據(jù)庫(kù)
--slavedelay
用在從節(jié)點(diǎn)上,設(shè)置同步主節(jié)點(diǎn)的時(shí)間周期,通過延緩執(zhí)行操作,可以恢復(fù)誤刪的文件
--autoresync
如果從節(jié)點(diǎn)與主節(jié)點(diǎn)不同了,則自動(dòng)同步
--oplogSize
主節(jié)點(diǎn)oplog的大小,單位MB
3.添加,刪除主源
從節(jié)點(diǎn)啟動(dòng)時(shí),不添加主服務(wù)源地址,而是隨后添加
啟動(dòng)
mongod --dbpath db/ --port 27002 --slave
添加源
use local
db.sources.insert( {"host":"127.0.0.1:27001"} )
修改源,則可以用insert,remove來(lái)完成
db.sources.insert( {"host":"prod.example.com:27001"} )
db.sources.remove( {"host":"127.0.0.1:27001"} )
so easy !~~
副本集
開啟3臺(tái):
1/bin/mongod --dbpath=1/db/ --port=10001 --replSet=kang/127.0.0.1:10002
2/bin/mongod --dbpath=2/db/ --port=10002 --replSet=kang/127.0.0.1:10001
3/bin/mongod --dbpath=3/db/ --port=10003 --replSet=kang/127.0.0.1:10003
4/bin/mongod --dbpath=4/db/ --port=10004 --replSet=kang/127.0.0.1:10004
初始化副本集
隨便進(jìn)入一臺(tái)的admin集合中
mongo 127.0.0.1:10002/admin
初始化命令:
db.runCommand({
"replSetInitiate":
{
"_id":"kang",
"members":
[
{"_id":1, "host":"127.0.0.1:10001"},
{"_id":2, "host":"127.0.0.1:10002"},
]
}
})
再添加一臺(tái)
rs.add("127.0.0.1:10003")
添加一臺(tái)仲裁機(jī)
rs.addArb("127.0.0.1:10004")
仲裁機(jī)會(huì)把1,2,3中一臺(tái)指定為主服務(wù),其他的為副,如果主掛了,仲裁機(jī)會(huì)把副中的一臺(tái)再指定為主,主重啟后變?yōu)楦?/div>
在主從中,從服務(wù)是不能讀的,需要開啟rs.slaveOk(),從服務(wù)才可以讀,但是從是不能寫入的
{"addshard":"127.0.0.1:10001","allowLocal":true}
)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。