介紹
基于v8引擎的文檔型數(shù)據(jù)庫
安裝
二進制包解壓就可以使用
bsondump # 導(dǎo)出bson結(jié)構(gòu)
mongo # 客戶端
mongod # 服務(wù)端
mongodump # 整體數(shù)據(jù)導(dǎo)出(二進制)
mongoexport # 導(dǎo)出json或csv
mongoimpoort # 導(dǎo)入
mongooplog # 日志
mongoperf #
mongorestore # 整體導(dǎo)入
mongos # 路由器,做集群使用
mongosniff #
mongostat #
mongotop #
啟動服務(wù)
mongod
--dbpath # 數(shù)據(jù)存放路徑
--logpath # 日志存放路徑
--fork # 在后臺運行
--port # 端口,默認(rèn)27017
例如:
mongod --dbpath=/data/ --logpath=/data/a.log --fork --port 27017
連接數(shù)據(jù)庫
mongo # 直接運行即可
入門命令
查看數(shù)據(jù)庫
show databases # 查看數(shù)據(jù)庫
show dbs
選中和創(chuàng)建數(shù)據(jù)庫
use <數(shù)據(jù)庫名稱> # 有則選中,無則隱式創(chuàng)建
查看集合(表)
show collections
# 或
show tables
創(chuàng)建集合(表)
db.createCollection('表名稱')
刪除集合
db.集合名.drop()
刪除數(shù)據(jù)庫
use <數(shù)據(jù)庫名> # 先選中,再刪除
db.dropDatabase()
增
# 增加單條數(shù)據(jù)
db.表名.insert({
"key":"val"
})
# 增加多條數(shù)據(jù)
db.表名.insert([
{"key":"val"},
{"key":"val"}
])
備注:默認(rèn)會帶上
_id
刪
db.表名.remove({
# 查詢表達式,如像此例為空則全部刪除
})
db.表名.remove({
"age":20
})
# 第二個參數(shù)設(shè)置為真則每次只會刪除一行
db.表名.remove({
"age":20
},true)
改
db.表名.update(
{"age":"20"}, # 查詢表達式
{"age":"22"} # 整個改為
)
db.表名.update(
{"age":"20"}, # 查詢表達式
{$set:{
"age":22
}} # 只修改該列
)
修改的賦值表達式
$set # 修改某列
$unset # 刪除某列
$rename # 重命名某列
$inc # 增長某列
$setOnInsert # upsert為true,且發(fā)生了insert操作時,可補充的字段
# 可選參數(shù)
upsert # 無匹配結(jié)果,則直接插入,(即:有則改,無則增加)例如:
# 例如
db.表名.update(
{"age":"20"},
{$set:{
"age":22
}},
{"upsert":true}
)
查
db.表名.find(
{}, # 查詢表達式
{} # 要查詢的列
)
# 查詢名稱為“zs”的年齡"age",第二個參數(shù)不傳則是查詢?nèi)康牧?db.表名.find(
{"name":"zs"},
{"age":1}
)
# 只查詢一行
db.表名.findOne(
{}, # 查詢表達式
{} # 要查詢的列
)
查詢表達式
$ne不等于
# 查詢age不等于19
db.表名.find({
"age":{
$ne:19
}
})
$gt大于
無
$lt小于
無
gte大于等于
無
lte小于等于
無
$in包含多個條件的
# 查詢age等于19,20,21的
db.表名.find({
"age":{
$in:[19,20,21]
}
})
$nin不包含多個條件的
# 查詢age不等于19,20,21的
db.表名.find({
"age":{
$nin:[19,20,21]
}
})
$all查詢某列,且至少包含多個條件的
# 查詢field列至少包含1,2的(field是一個數(shù)組)
db.表名.find({
"field":{
$all:[1,2]
}
})
$exists查詢含有某列字段的文檔
# 查詢含有age屬性的且年齡不等于19的
db.表名.find({
"age":{
$ne:19,
$exists:1
}
})
$or查詢滿足多個條件任一一個的
# 查詢年齡等于19或是男生的
db.表名.find({
$or:[
{"age":19},
{"sex":"male"}
]
})
$mod將查詢的值除以第一個給定的值,若余數(shù)等于第二個給定的值,則返回該結(jié)果
db.表名.find({
"age":{
$mod:[11,0]
}
})
$not查詢不包括條件的
# 通常與正則聯(lián)合使用查詢那些與特定模式不匹配的文檔
db.表名.find({
"age":{
$not:{$mod:[11,0]}
}
})
$where遍歷查詢
# 查詢age等于19的男生(性能低下,不推薦使用)
db.表名.find({
$where:"this.age==19 && this.sex == 'male'"
})
游標(biāo)操作
游標(biāo)即查詢出來返回的資源
# 聲明游標(biāo),即將結(jié)果保存至變量
let cursor = db.表名.find();
# 判斷是游標(biāo)是否已經(jīng)還有下一個
cursor.hasNext()
# 取出游標(biāo)下一個單元
cursor.Next()
# 使用來取出,例如以下幾個例子:
white(data.hasNext()){
printjson(data.next());
};
# 或
for(var doc = true,cursor.hasNext()){
printjson(data.next());
}
# 或
for(var doc = true,cursor.hasNext()){
printjson(data.next());
}
# 或
cursor.forEach((obj)=>{
printjson(obj);
});