工作上 要用到 MongoDB 了 而 工具上就是要用 Robo 3T
安裝 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
待續
如果內容有誤請多鞭策謝謝