Mongo連線與查詢
最近一個專案中又接觸到了mongo資料庫,在本次測試過程中,需要自己查據,造資料,又重新整理了一遍用到的命令,以下是筆記整理
在mongodb裡面用到的主要概念是文件,是一個分散式文件儲存資料庫
一些概念對應
MongoDB的單個例項可以容納多個獨立的資料庫,每一個都有自己的集合和許可權,不同的資料庫也放置在不同的檔案中。
(一)mongo連線進入
1.連線mongodb
$mongo
2.檢視mongodb的版本
$db.version()
3.檢視當前有哪些資料庫(對應sql:show databases)
$show dbs
疑問:當前要是沒有切入admin資料庫,就無法檢視,不清楚原因。。
4.切入admin資料庫:(對應sql :use database)
$use admin(和mysql的切換資料庫一樣)
$db.auth("username","password")
$show dbs
5.檢視集合(對應sql show tables)
$show collections(也用show 這裡的collections也就是mysql的表概念差不多)
6.檢視文件(對應sql: select)
$db.collections_name.find()----無篩選條件,一般情況下不要直接用,資料量太大
$db.collections_name.find({'key':'value'})-----有篩選條件
7.插入文件(對應sql: insert into)
db.collections.insertOne()------插入一個文件
db.collections.insertMany()------插入多個文件
db.collections.insert()------可以插入一個集合或多個文件
(二)mongo查詢語句
(1)查詢大於小於,一個區間
$gt 大於
$lte 小於
例:$db.collection.find({"time":{"$gt":153456789,"$lte":1534798932}}).limit(20)
解釋:返回時間大於153456789,小於153479893的記錄,限制20條
相當於sql:
$select * from collection where time >153456789 and time<1534798932 limit 20;
或:$select * from collection where time between 153456789 and 1534798932 limit 20;
(2)模糊匹配
簡單的模糊匹配:/string /
高階的模糊匹配,需要用到正則,*,^之類的(需要好好學習正則匹配)
例:$db.collection.find({"address":/順義區/}).limit(20)
解釋:返回address中包含順義區的記錄,限制20條
相當於sql:
$ select * from collection where address like"%順義區%" limit 20;
(3)統計條數
計數:count()
例:$db.collection.find().count()
解釋:返回collection的記錄條數
相當於sql:
$ select count(*) from collection;
(4)限制返回條數
limit(n);限制n條記錄返回
例:$ db.collection.find().limit(5)
相當於sql:
$ select * from collection limit 5;
(5)修改資料
update()
例:
修改多條資料:$ db.location_201811.update({'moid':'京AFW272'},{$set:{'moid':'京ABB170'}},{multi:true})
解釋:修改所有資料中車牌:“京AFW272”為“京ABB170”
修改單條資料:$ db.location_201811.update({'moid':'京AFW272'},{$set:{'moid':'京ABB170'}})
解釋:修改一條資料中車牌:“京AFW272”為“京ABB170”
相當於sql:
$ update collection set moid="京ABB170" where moid="京AFW272";
(6)插入資料
$ db.collection.insert({"_id","01","plate":"陝A33333","address":"浙江省杭州市"})
$ db.colletion.save({"_id":"02","plate":"陝A33333","address":"浙江省杭州市"})
insert()和save()都表示插入資料,當insert插入同樣的id時會出現異常,save會強制更新掉
(7)返回指定欄位的資料
例:$ db.collection.find({"plate":"陝A11111"},{"plate:1,"address":1,"time":1}).limit(5)
解釋:
前面:{"plate":"陝A11111"}:表示查詢車牌為:陝A1111的資料
後面:{"plate:1,"address":1,"time":1},表示查詢需要返回的欄位
tip:
1.mongo規定除過id可以隨意設定為0或者1,表示返回或不返回,其餘欄位不允許交叉設定為0和1的情況
2.即除了_id,你不能在一個物件中同事指定0和1,如果你設定了一個欄位為0,則其他未設定的值預設為1,反之亦然
相當於sql:
$select plate,address,time from collection where plate='陝A11111' limit 5;
(8)資料排序
sort({"time":-1})或者sort({"time":1})
例:$db.collection.find({"plate":"陝A11111"},{"plate:1,"address":1,"time":1}).sort({"time":-1).limit(5)
解釋:
接(7),按照時間倒敘排列,返回車牌為陝A1111,指定欄位的5條記錄,其中sort方法中,-1表示倒排,如果設定為1,即表示按照時間正序排序
相當於sql:
sort({"time":-1}):按照時間倒敘
$select plate,address,time from collection where plate='陝A11111' order by time desc limit 5;
sort({"time":-1}):按照時間正序
$select plate,address,time from collection where plate='陝A11111' order by time limit 5;