新聞中心
一些基礎(chǔ)忘記隨時(shí)查看。。
公司專(zhuān)注于為企業(yè)提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、商城網(wǎng)站建設(shè),小程序定制開(kāi)發(fā),軟件按需網(wǎng)站制作等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶(hù)的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶(hù)設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,成都創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
#整備恢復(fù)
mongodump --port 20001 --authenticationDatabase=admin -u * -d lvlv -c lvlv -o /home
mongorestore --drop --host 172.16.201.74 --port 20001 --authenticationDatabase=admin -umgbackup -d test /tmp/liding/test/liding.bson
#基于時(shí)間備份oplog
mongodump --port 20001 --authenticationDatabase=admin -u* -d local -c oplog.rs -q 'ts:{$lt:Timestamp(1462830369,1),$gt: Timestamp(1462821613, 1)}}' -o /tmp/lidddd
#將oplog恢復(fù)到臨時(shí)庫(kù)
mongorestore -u* --authenticationDatabase=admin --host 172.16.201.73 --port 27017 -d local -c oplog.rs /data/backup/oplog1/local/oplog.rs.bson
#從臨時(shí)庫(kù)重放oplog
mongooplog --port 20001 -u* --authenticationDatabase=admin --from=172.16.201.73:27017
oplog查找
db.oplog.rs.find({ts:{$lt:Timestamp(1462917498, 1),$gt:Timestamp(1462918425, 1)}}).pretty()
use local
db.oplog.rs.find()
date -d @1361542596 +"%Y-%m-%d %H:%M:%S"
for (var i=0;i<1000;i++){db.lvlv.save({"xywy":i})}
sql="db.getReplicationInfo();"
echo "$sql"|/usr/local/xywy/MongoDB-3.0.8/bin/mongo 127.0.0.1:20001/admin -u* -pC^8cE#1RvX5rBg0 --authenticationDatabase=admin --shell
添加管理用戶(hù):
use admin
db.createUser(
{
user: "*",
pwd: "*****",
roles: [ { role: "root", db: "admin" } ]
}
)
添加備份用戶(hù):
use admin
db.createUser(
{
user: "mgbackup",
pwd: "*********",
roles: [ { role: "backup", db: "admin" }, { role: "restore", db: "admin" } ]
}
)
添加日常操作用戶(hù):
use admin
db.createUser(
{
user: "mgadmin",
pwd: "*****",
roles: [ { role: "readWriteAnyDatabase", db:admin } ]
}
)
添加讀寫(xiě)用戶(hù):
use admin
db.createUser(
{
user: "liuyunsong",
pwd: "*****",
roles: [
{ role: "rw", db: "123" }
]
}
)
修改用戶(hù)權(quán)限:
use admin
db.runCommand(
{
updateUser:"liuyaxin",
pwd:"****",
roles: [
{ role: "read", db: "123" }
]
}
)
刪除用戶(hù):
use 123
db.dropUser("123")
刪除一個(gè)庫(kù)下所有用戶(hù):
use 123
db. dropAllUsers ()
對(duì)用戶(hù)添加角色:
use 123
db.runCommand( { grantRolesToUser: "*",
roles: [
{ role: "admin", db: "admin"}
]
} )
對(duì)用戶(hù)移除角色:
use 123
db.runCommand( { revokeRolesFromUser: "liuyaxin",
roles: [
{ role: "read", db: "234"}
]
} )
創(chuàng)建角色:
use admin
db.runCommand({ createRole: "rw",
privileges: [
{ resource: { db: "123", collection: "" }, actions: [ "find", "update", "insert", "remove" ] }
],
roles: [
{ role: "read", db: "admin" }
]
})
修改角色權(quán)限:
use admin
db.runCommand(
{
updateRole: "rw",
privileges:
[
{
resource: { db: "123", collection: "" },
actions: [ "find" , "update", "insert", "remove" ]
}
],
roles:
[
{ role: "read", db: "admin" }
]
}
)
刪除角色:
use admin
db.runCommand(
{
dropRole: "rw",
writeConcern: { w: "majority" }
}
)
刪除所有角色:
Use 123
db.runCommand(
{
dropAllRolesFromDatabase: 1,
writeConcern: { w: "majority" }
}
)
為角色增加權(quán)限:
use 123
db.runCommand(
{
grantPrivilegesToRole: "rw",
privileges: [
{
resource: { db: "123", collection: "" }, actions: [ "find" ]
}
]
}
)
移除角色權(quán)限:
Use 123
db.runCommand(
{
revokePrivilegesFromRole: "rw",
privileges:
[
{
resource: { db: "123", collection: "" },
actions: [ "insert", "find" ]
}
]
}
)
刷新權(quán)限:
Use admin
db.runCommand( { invalidateUserCache: 1 } )
1、數(shù)據(jù)庫(kù)中查詢(xún)業(yè)務(wù)人員給的賬號(hào)在數(shù)據(jù)庫(kù)中是否存在
use database
show users
2、根據(jù)業(yè)務(wù)開(kāi)發(fā)人員提出的需求授權(quán)
讀寫(xiě)用戶(hù)名:庫(kù)名
先定義讀寫(xiě)角色
use 庫(kù)名
db.runCommand({ createRole: "rw",
privileges: [
{ resource: { db: "庫(kù)名", collection: "" }, actions: [ "find", "update", "insert", "remove","listCollections"] }
],
roles: [
]
})
再加用戶(hù)
use 庫(kù)名
db.createUser(
{
user: "庫(kù)名",
pwd: "*****",
roles: [
{ role: "rw", db: "庫(kù)名" }
]
}
)
只讀用戶(hù):庫(kù)名_r
先定義只讀角色
use 庫(kù)名
db.runCommand({ createRole: "r",
privileges: [
{ resource: { db: "庫(kù)名", collection: "" }, actions: [ "find","listCollections" ] }
],
roles: [
]
})
在添加用戶(hù)
use 庫(kù)名
db.createUser(
{
user: "庫(kù)名_r",
pwd: "************",
roles: [
{ role: "r", db: "庫(kù)名" }
]
}
)
3、檢驗(yàn)授權(quán)有無(wú)生效
使用授權(quán)的用戶(hù)登錄數(shù)據(jù)庫(kù),查看該庫(kù)權(quán)限是否正確
use 庫(kù)名
db.auth("""")
4、將授權(quán)好的用戶(hù)名密碼發(fā)給該項(xiàng)目負(fù)責(zé)人同時(shí)發(fā)給dba組存檔,格式如下
idc:xx 主庫(kù) ip:port 從庫(kù) ip:port
數(shù)據(jù)庫(kù): databases
讀寫(xiě)用戶(hù): databases 讀寫(xiě)密碼: xxx
只讀用戶(hù): databases_r 只讀密碼: xxx
管理用戶(hù): database_admin 管理密碼: xxx
->use Admin (切換到創(chuàng)建用戶(hù))
->db.TestDb (創(chuàng)建數(shù)據(jù)庫(kù))
->db.addUser(“userName”,”P(pán)wd”) 創(chuàng)建用戶(hù)
->db.auth(“userName”,”P(pán)wd”) 設(shè)置用戶(hù)為允許連接的用戶(hù)
->db.createCollection(“TableName”) 創(chuàng)建表
->showcollections 查看表是否創(chuàng)建成功
->db.TableName.Save({age:1}) 添加數(shù)據(jù)
->db.TableName.find() 查看添加的數(shù)據(jù)是否成功(如果沒(méi)有查詢(xún)到任何的結(jié)果,說(shuō)明添加失?。?/p>
創(chuàng)建數(shù)據(jù)庫(kù)
語(yǔ)法
MongoDB 創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:
use DATABASE_NAME
注:該命令只是在內(nèi)存中臨時(shí)創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建后如果沒(méi)有寫(xiě)入操作退出后會(huì)在內(nèi)存中釋放
刪除數(shù)據(jù)庫(kù)
語(yǔ)法
MongoDB 刪除數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:
db.dropDatabase()
注:刪除庫(kù)之前一定要先use database
插入文檔
MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語(yǔ)法如下:
db.COLLECTION_NAME.insert({document})
MongoDB 更新文檔
MongoDB 使用 update() 和 save() 方法來(lái)更新集合中的文檔。接下來(lái)讓我們?cè)敿?xì)來(lái)看下兩個(gè)函數(shù)的應(yīng)用及其區(qū)別。
update() 方法
update() 方法用于更新已存在的文檔。語(yǔ)法格式如下:
db.collection.update(
參數(shù)說(shuō)明:
query : update的查詢(xún)條件,類(lèi)似sql update查詢(xún)內(nèi)where后面的。
update : update的對(duì)象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢(xún)內(nèi)set后面的
upsert : 可選,這個(gè)參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。
multi : 可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來(lái)多條記錄全部更新。
writeConcern :可選,拋出異常的級(jí)別。
save() 方法
save() 方法通過(guò)傳入的文檔來(lái)替換已有文檔。語(yǔ)法格式如下:
db.collection.save(
MongoDB 刪除文檔
MongoDB remove()函數(shù)是用來(lái)移除集合中的數(shù)據(jù)。
在執(zhí)行remove()函數(shù)前先執(zhí)行find()命令來(lái)判斷執(zhí)行的條件是否正確,這是一個(gè)比較好的習(xí)慣。
語(yǔ)法
remove() 方法的基本語(yǔ)法格式如下所示:
db.collection.remove(
參數(shù)說(shuō)明:
query :(可選)刪除的文檔的條件。
justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個(gè)文檔。
writeConcern :(可選)拋出異常的級(jí)別。
查詢(xún)文檔
語(yǔ)法
MongoDB 查詢(xún)數(shù)據(jù)的語(yǔ)法格式如下:
>db.COLLECTION_NAME.find()
find() 方法以非結(jié)構(gòu)化的方式來(lái)顯示所有文檔。
如果你需要以易讀的方式來(lái)讀取數(shù)據(jù),可以使用 pretty() 方法,語(yǔ)法格式如下:
>db.col.find().pretty()
MongoDB 與 RDBMS Where 語(yǔ)句比較
如果你熟悉常規(guī)的 SQL 數(shù)據(jù),通過(guò)下表可以更好的理解 MongoDB 的條件語(yǔ)句查詢(xún):
等于{
小于{
小于或等于{
大于{
大于或等于{
不等于{
操作
格式
范例
RDBMS中的類(lèi)似語(yǔ)句
MongoDB AND 條件
MongoDB 的 find() 方法可以傳入多個(gè)鍵(key),每個(gè)鍵(key)以逗號(hào)隔開(kāi),及常規(guī) SQL 的 AND 條件。
語(yǔ)法格式如下:
>db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR 條件
MongoDB OR 條件語(yǔ)句使用了關(guān)鍵字 $or,語(yǔ)法格式如下:
>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
MongoDB Limit與Skip方法
MongoDB Limit() 方法
如果你需要在MongoDB中讀取指定數(shù)量的數(shù)據(jù)記錄,可以使用MongoDB的Limit方法,limit()方法接受一個(gè)數(shù)字參數(shù),該參數(shù)指定從MongoDB中讀取的記錄條數(shù)。
語(yǔ)法
limit()方法基本語(yǔ)法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)
MongoDB Skip() 方法
我們除了可以使用limit()方法來(lái)讀取指定數(shù)量的數(shù)據(jù)外,還可以使用skip()方法來(lái)跳過(guò)指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過(guò)的記錄條數(shù)。
語(yǔ)法
skip() 方法腳本語(yǔ)法格式如下:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
MongoDB 排序
MongoDB sort()方法
在MongoDB中使用使用sort()方法對(duì)數(shù)據(jù)進(jìn)行排序,sort()方法可以通過(guò)參數(shù)指定排序的字段,并使用 1 和 -1 來(lái)指定排序的方式,其中 1 為升序排列,而-1是用于降序排列。
語(yǔ)法
sort()方法基本語(yǔ)法如下所示:
>db.COLLECTION_NAME.find().sort({KEY:1})
MongoDB 聚合
MongoDB中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計(jì)平均值,求和等),并返回計(jì)算后的數(shù)據(jù)結(jié)果。有點(diǎn)類(lèi)似sql語(yǔ)句中的 count(*)。
aggregate() 方法
MongoDB中聚合的方法使用aggregate()。
語(yǔ)法
aggregate() 方法的基本語(yǔ)法格式如下所示:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
下表展示了一些聚合的表達(dá)式:
表達(dá)式
描述
實(shí)例
$sum計(jì)算總和。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg計(jì)算平均值db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min獲取集合中所有文檔對(duì)應(yīng)值得最小值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max獲取集合中所有文檔對(duì)應(yīng)值得最大值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push在結(jié)果文檔中插入值到一個(gè)數(shù)組中。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet在結(jié)果文檔中插入值到一個(gè)數(shù)組中,但不創(chuàng)建副本。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first根據(jù)資源文檔的排序獲取第一個(gè)文檔數(shù)據(jù)。db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last根據(jù)資源文檔的排序獲取最后一個(gè)文檔數(shù)據(jù)db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
管道的概念
管道在Unix和Linux中一般用于將當(dāng)前命令的輸出結(jié)果作為下一個(gè)命令的參數(shù)。
MongoDB的聚合管道將MongoDB文檔在一個(gè)管道處理完畢后將結(jié)果傳遞給下一個(gè)管道處理。管道操作是可以重復(fù)的。
表達(dá)式:處理輸入文檔并輸出。表達(dá)式是無(wú)狀態(tài)的,只能用于計(jì)算當(dāng)前聚合管道的文檔,不能處理其它的文檔。
這里我們介紹一下聚合框架中常用的幾個(gè)操作:
$project:修改輸入文檔的結(jié)構(gòu)??梢杂脕?lái)重命名、增加或刪除域,也可以用于創(chuàng)建計(jì)算結(jié)果以及嵌套文檔。
$match:用于過(guò)濾數(shù)據(jù),只輸出符合條件的文檔。$match使用MongoDB的標(biāo)準(zhǔn)查詢(xún)操作。
$limit:用來(lái)限制MongoDB聚合管道返回的文檔數(shù)。
$skip:在聚合管道中跳過(guò)指定數(shù)量的文檔,并返回余下的文檔。
$unwind:將文檔中的某一個(gè)數(shù)組類(lèi)型字段拆分成多條,每條包含數(shù)組中的一個(gè)值。
$group:將集合中的文檔分組,可用于統(tǒng)計(jì)結(jié)果。
$sort:將輸入文檔排序后輸出。
$geoNear:輸出接近某一地理位置的有序文檔。
管道操作符實(shí)例
1.$project實(shí)例
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
2.$match實(shí)例
db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
3.$skip實(shí)例
db.article.aggregate( { $skip : 5 });
mongoDB常用命令
1、與Mql對(duì)照
MySQL
MongoDB
說(shuō)明
mysqld
mongod
服務(wù)器守護(hù)進(jìn)程
mysql
mongo
客戶(hù)端工具
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()
新建用戶(hù)并權(quán)限
show databases
show dbs
顯示庫(kù)列表
Show tables
Show collections
顯示表列表
Show slave status
Rs.status
查詢(xún)主從狀態(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})
查詢(xún)表
Select * from users
db.users.find()
查詢(xún)表
Select * from users where age=33
db.users.find({age:33})
條件查詢(xún)
Select a, b from users where age=33
db.users.find({age:33},{a:1, b:1})
條件查詢(xún)
select * from users where age<33
db.users.find({'age':{$lt:33}})
條件查詢(xún)
select * from users where age>33 and age<=40
db.users.find({'age':{$gt:33,$lte:40}})
條件查詢(xún)
select * from users where a=1 and b='q'
db.users.find({a:1,b:'q'})
條件查詢(xún)
select * from users where a=1 or b=2
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
條件查詢(xún)
select * from users limit 1
db.users.findOne()
條件查詢(xún)
select * from users where name like "%Joe%"
db.users.find({name:/Joe/})
模糊查詢(xún)
select * from users where name like "Joe%"
db.users.find({name:/^Joe/})
模糊查詢(xún)
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’)
添加用戶(hù)
readOnly-->false
db.addUser(‘test’, ’test’, true)
添加用戶(hù)
readOnly-->true
db.addUser("test","test222")
更改密碼
db.system.users.remove({user:"test"})
或者db.removeUser('test')
刪除用戶(hù)
db.system.users.find()
查看用戶(hù)列表
show users
查看當(dāng)前庫(kù)所有用戶(hù)
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()
查詢(xún)索引的大小
名稱(chēng)欄目:MongoDb基礎(chǔ)命令
網(wǎng)站路徑:http://fisionsoft.com.cn/article/ppgcpj.html