Mongodb筆記

介紹

基于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);
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容