在一年前曾經接觸使用過mongo,現在重新拾起,做一些總結記錄。
mongodb是非關係型數據庫裏比較熱門的一種,具體介紹和優劣對比就先不做記錄了,這裏主要簡單記錄用法。初學者可以參考 菜鳥教程-mongodb,我只是整理記錄,並不如教程的全面,只是個人用的學習筆記。
mongodb的集合 類似於 關係型數據庫的表,集合的列 類似於 表的行。數據是形如JSON串的結構存儲在db的集合中的,是mongodb獨有的結構bson。
以下命令使用在mongodb的命令行交互中:
show dbs (顯示所有db名)
use dbName (進入某db,如果沒有則會新建)
show tables (顯示db中所有集合名)
db.createCollection(colName) (增加一個集合,參數是集合名)
db.col.insert( { key : value, …} ) (往集合內插入一條數據,db.集合名.insert( data ))
db.dropDatabase() (刪除數據庫,在use 數據庫名 之後輸入調用)
db.collection.drop() (刪除集合,db.集合名.drop() )
db.collection.remove( , { justOne: , writeConcern: } ) (刪除數據/文檔)
db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)
db.collection.find(query, projection) (query查詢條件,projection使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略))
如果沒有參數,默認返回集合中所有數據。findOne()只顯示一條,如果存在多條數據默認第一條。
perrty() (易讀顯示)
刪/改/查 都涉及到條件,條件參數是可選,無條件默認選擇的全部。
操作符 | 含義 | 用法 |
---|---|---|
$gt | 大於( > ) | db.col.find({key: { $gt : value} }) |
$lt | 小於( < ) | db.col.find({key: { $lt : value} }) |
$gte | 大於等於( >= ) | db.col.find({ key: {$gte : value} }) |
$lte | 小於等於( <= ) | db.col.find({ key: {$lte : value} }) |
$ne | 不等於 | db.col.find({ key: { $ne: value} }) |
$eq | 等於 | db.col.find({ key: value }) 或者 db.col.find({ key: { $eq: value} }) 不僅限於value爲數字 |
$type | 匹配類型 | 匹配類型 |
模糊查詢(字符串):
包含value的 db.col.find({ key : /value/ })
value開頭的 db.col.find({ key : /^value/ })
value結尾的 db.col.find({ key : /value$/ })
例如:
假如有這麼三條數據
{
"name" : "root",
"value" : 2,
"tags" : [
"root",
"admin",
],
"days" : [ 15, 20, 25 ],
"info" : {
"age" : 24,
"account" : "rootmanager",
}
},
{
"name" : "test",
"value" : 3,
"tags" : [
"admin",
],
"days" : [ 15.1, 11, 12 ],
"info" : {
"age" : 23,
"account" : "testAccount",
"desc" : "this is a test",
}
},
{
"name" : "manager",
"value" : 1,
"tags" : [
"root",
],
"days" : [ 25, 20, 21 ],
"info" : {
"age" : 24,
}
}
查詢 value < 2 的數據 : db.集合名.find({ “value” : {$lt:2} })
查詢 value < 2 且 value > 0 的數據 : db.集合名.find({ “value” : {$lt:2, $gt:0} })
查詢 value == 2 或 value == 3 的數據 : db.集合名.find({ $or : [ {“value” : 2}, {“value” : 3} ] })
數組查詢:
查詢 “tags 包含 ‘root’ ” 的數據 : db.集合名.find({ “tags” : “root” })
查詢 “tags 包含指定內容且順序與參數順序一致” 的數據 : db.集合名.find({ “tags” : [“root”, “admin”] })
查詢 “tags 包含指定內容且忽略其他內容以及順序” 的數據 : db.集合名.find({ “tags” : { $all: [“root”, “admin”] } })
查詢 “tags 大小等於2” 的數據 : db.集合名.find({ “tags” : { $size : 2} })
查詢 “days 中第一個元素 大於($gt) 22和小於($lt) 30“ 的數據:db.集合名.find({ “days.1” : {$gt:22, $lt:30} })
查詢 “days 裏含有大於($gt) 22和小於($lt) 30” 的數據:db.集合名.find({ “days” : {$gt:22, $lt:30} })
查詢 “days 至少包含一個大於($gt) 22和小於($lt) 30” 的元素 的數據:db.集合名.find({ “days” : {$elemMatch: {$gt:22, $lt:30}} })
Map查詢:
map和array查詢有些類似,不過map中的元素可能是混合型的。
查詢 info裏 age 等於24 的數據:db.集合名.find({ “info.age”: 24}) 或者 db.集合名.find({ “info” : {“age”:24} })
剩下的查詢可以舉一反三的去試試看,我暫時沒試到,所以只寫到這裏,以後有用到的會繼續補充。