[MongoDB] Robo 3T 查詢篇

工作上 要用到 MongoDB 了 而 工具上就是要用 Robo 3T 

安裝 MongoDB - 官網下載 , 安裝教學

安裝 Robo 3T - 官網下載 , 安裝教學同上

查詢結果設定 習慣看Text Mode 可以在這裡設定
Table Mode 可以用UI 新刪修查 Document
點兩下 Collection 就會開啟查詢Tab , 查詢語法可以按enter換行

顯示行號 Options - > Show Line Numbers By Default.. (要開新查詢才會有)

查詢語法

運算子 
$eq 等於 , $ne 不等於 , $gt 大於 , $lt 小於 ,$gte 大於等於 , $lte 小於等於 ,  $in 存在 , $nin 不存在 , $or $and 邏輯運算 , $exists 欄位存不存在 , $type 資料型別 

db.getCollection('col').find({},{ "title": 1 ,"description":2}) //只撈title 跟 description 如果不要_id , 可以加上 ,"_id":0
db.getCollection('col').find({ "title" : /鐵/}) // 查询 title 包含"教"  , /^教/ "教"開始   ,/教$/ "教"結尾
db.getCollection('col').find({ "title" : /\+/}) // 查询 title 包含"+" 
db.getCollection('col').find({ "title" : /鐵/ ,"by" : /哥$/ }) // and 就是用逗號分開
db.getCollection('col').find( { qty: { $in: [ 5, 15 ] } } ) //Use the $in Operator to Match Values
{ _id: 1, item: "abc", qty: 10, tags: [ "school", "clothing" ], sale: false } //Use the $in Operator to Match Values in an Array

$in:["a","b"] : 其中一個符合 有比對成功 or 的概念
$all:["a","b"] : 兩個都要有 才算比對成功 and 的概念


db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
)
// or 範例

db.getCollection('col').find(

    "city" : {$lt :100, $gt : 10},
    $or: 
    [
         {"title":"2018 ithome鐵人賽"}, 
         {"name":"Linda"},
         {"name":"Lue"}
    ]
}
)
//查詢city 大於10 小於100 and [or 的條件]

db.col.find({"title" : {$type : 2}}) // 查詢 title 資料結構是 string  資料型別 

db.col.find({},{"title":1,_id:0}).sort({"title":-1}).skip(1).limit(1) // titile 反排後 跳過一筆 取一筆資料出來  , 注意 是先執行 sort , 再來 skip , 再來 limit

db.col.find({"Content.CategoryID" : {$exists : true}}) //槽狀可以直接點

db.User.distinct("UserId").length  //distinct後是陣列所以用length

//​aggregate
db.User.aggregate([
    { $sort : { "UserId" : -1 } },
    { $group: {_id: null, uniqueValues: {$addToSet: "$UserId"}}}    //等同distinct
],
    { 
        allowDiskUse: true      //遇到錯誤是allowDiskUse 就打開
    })
//aggregate join 表

db.getCollection('User').aggregate(
[
 {$match:{
        "Type":5
    }}
    ,{$lookup:
        {
            as: 'UserPhone',
            from: 'UserPhone',
            localField: '_id',
            foreignField: 'UserID'
        }
    }
    ,{$unwind: {path: "$UserPhone","preserveNullAndEmptyArrays": false}}
   , {$project:
        {
            "_id" : 0,
            "Type":"$Type",
            "LastUpdatedDate" :"$LastUpdatedDate",
            "AccountPolicyVersion":"$UserPhone.Phone",
        }
    }
    //,{$count: "count"}
])

"preserveNullAndEmptyArrays": 
false 是 inner join
true 是 left join

,{$unwind: "$AccountPolicy"} 預設是 inner join

有時候 join 後 會有array 可以用  "Name": { $arrayElemAt: ["$AccountUserName.Name", 0] }, 這樣就是取第一筆

兩個欄位組合成一個新欄位
 $addFields: { FullName: { $concat: [ "$LastName", "$FirstName" ] } }

aggregate 模糊搜尋  " FullName" : /test/
C# 
new BsonDocument { { "FullName", new BsonDocument { { "$regex", new BsonRegularExpression($"/{key}/") } }  } }

 


//​備份 還原

備份db

CD C:\Program Files\MongoDB\Server\3.4\bin\
mongodump --host 127.0.0.1 --port 27017 --db DbName --authenticationDatabase admin --username 帳號 --password 密碼 --excludeCollection=GeospatialData_All --out C:\DBBackup\DbName
@pause

還原db

CD C:\Program Files\MongoDB\Server\3.4\bin\
mongorestore --host 127.0.0.1 --port 27017 --db DbName --authenticationDatabase admin --username 帳號 --password 密碼 C:\DBBackup\DbName
@pause

備份單一表

CD C:\Program Files\MongoDB\Server\3.4\bin\
mongoexport --host 127.0.0.1 --port 27017 --db DbName --authenticationDatabase admin --username 帳號--password 密碼 --collection CollectionName --out C:\DBBackup\CollectionName.json

@pause

還原單一表

CD C:\Program Files\MongoDB\Server\3.4\bin\
mongoimport --host 127.0.0.1 --port 27017 --db DbName --authenticationDatabase admin --username 帳號--password 密碼 --collection CollectionName --file C:\DBBackup\CollectionName.json

@pause

待續
 

如果內容有誤請多鞭策謝謝