references: http://youtvmobile.net/mongodb-%E5%9F%BA%E7%A4%8E%E5%85%A5%E9%96%80%E6%95%99%E5%AD%B8%EF%BC%9Amongodb-shell-%E7%AF%87/
https://docs.mongodb.com/manual/tutorial/getting-started/
這裡教大家如何透過 MongoDB shell(mongo)來使用 MongoDB 資料庫。
mongo 是一個用來操作 MongoDB 的互動式 JavaScript 介面,您可以使用它來查詢(query)或更新(update)資料庫中的資料,另外也可以進行一些資料庫的管理動作。
在使用 mongo 之前,請先安裝好 MongoDB 資料庫,安裝方式請參考:
Windows:在 Windows 中安裝 MongoDB 資料庫
Ubuntu Linux:在 Ubuntu Linux 中安裝 MongoDB 資料庫
Mac OS X:在 Mac OS X 中安裝 MongoDB 資料庫
在輸入資料之前,先使用 use 選擇 database:
use test
然後用 insert 指令將一些資料輸入到 restaurants 這個 collection:
db.restaurants.insert(
{
“address” : {
“street” : “2 Avenue”,
“zipcode” : “10075”,
“building” : “1480”,
“coord” : [ -73.9557413, 40.7720266 ],
},
“borough” : “Manhattan”,
“cuisine” : “Italian”,
“grades” : [
{
“date” : ISODate(“2014-10-01T00:00:00Z”),
“grade” : “A”,
“score” : 11
},
{
“date” : ISODate(“2014-01-16T00:00:00Z”),
“grade” : “B”,
“score” : 17
}
],
“name” : “Vella”,
“restaurant_id” : “41704620”
}
)
在執行這個動作時,如果遇到 collection 不存在的狀況,MongoDB 會自動建立這個 collection。在執行之後,會傳回一個 WriteResult 物件:
WriteResult({ “nInserted” : 1 })
其中 nInserted 的值就是輸入資料的筆數。
在 MongoDB 中,所有儲存在 collection 中的 document 都會有一個 _id field 作為 primary key,如果輸入資料時沒有加上這個 field,MongoDB 會自動產生一個 ObjectId 作為 _id。
查詢資料
若要查詢資料,可以使用 find 方法,當然在查詢之前記得要先指定 database(如果之前已經有指定過就不用了):
use test
直接執行 find 不加任何查詢條件,就會列出該 collection 中所有的 documents:
db.restaurants.find()
查詢的結果會像這樣:
{ “_id” : ObjectId(“55b5de22bdc78b2145bd6e32”), “address” : { “street” : “2 Avenue”, “zipcode” : “10075”, “building” : “1480”, “coord” : [ -73.9557413, 40.7720266 ] }, “borough” : “Manhattan”, “cuisine” : “Italian”, “grades” : [ { “date” : ISODate(“2014-10-01T00:00:00Z”), “grade” : “A”, “score” : 11 }, { “date” : ISODate(“2014-01-16T00:00:00Z”), “grade” : “B”, “score” : 17 } ], “name” : “Vella”, “restaurant_id” : “41704620” }
指定查詢條件
加入查詢條件:
db.restaurants.find( { “borough”: “Manhattan” } )
使用句點(.)對 embedded document 加上查詢條件:
db.restaurants.find( { “address.zipcode”: “10075” } )
句點(.)也可以用於查詢陣列中的 field 值,這裡的 grades 是一個陣列,裡面包含許多 embedded documents,以這樣的查詢方式的話,只要有任一個 embedded document 符合條件,就會列出該 document:
db.restaurants.find( { “grades.grade”: “B” } )
以運算子指定查詢條件
MongoDB 提供了一系列的運算子,讓使用者可以運用在資料的查詢上,使用運算子的限制條件語法為:
{
其中
如果要查詢 grades.score 大於 30 的 documents,則可使用 $gt 運算子:
db.restaurants.find( { “grades.score”: { $gt: 30 } } )
查詢 grades.score 小於 10 的 documents,則使用 $lt 運算子:
db.restaurants.find( { “grades.score”: { $lt: 10 } } )
除了這些,MongoDB 還有許多其他的運算子可以使用,請參考 Query and Projection Operators。
使用多個條件
如果同時使用多個查詢條件,可以直接用逗號分開:
db.restaurants.find( { “cuisine”: “Italian”, “address.zipcode”: “10075” } )
這樣的效果就等於 and 運算。而如果要使用 or 運算,則可使用 $or 運算子:
db.restaurants.find(
{ $or: [ { “cuisine”: “Italian” }, { “address.zipcode”: “10075” } ] }
)
排序查詢結果
如果要讓查詢的結果依照 field 來排序,可以加上 sort 方法,並且指定排序的 field 名稱與排列方式,1 代表遞增,-1 代表遞減。例如:
db.restaurants.find().sort( { “borough”: 1, “address.zipcode”: 1 } )
這個查詢指令會傳回 restaurants 中所有的 documents,然後以 borough 的值做遞增排序,在 borough 相同的時候,就以 address.zipcode 做遞增排序。
列出所有的 collections
若要列出 database 所有的 collections,可以使用以下幾種方式:
show collections
show tables
db.getCollectionNames()
資料庫系統資訊
若要查詢整個 MongoDB 中所儲存的資料量大小等系統資訊,可以使用 db.stats:
db.stats()
{
“db” : “test”,
“collections” : 5,
“objects” : 344697,
“avgObjSize” : 10701.451500883384,
“dataSize” : 3688758228,
“storageSize” : 4248158208,
“numExtents” : 35,
“indexes” : 4,
“indexSize” : 41885648,
“fileSize” : 8519680000,
“nsSizeMB” : 16,
“dataFileVersion” : {
“major” : 4,
“minor” : 5
},
“ok” : 1
}
其中 dataSize 就是所有未壓縮原始資料的大小,storageSize 是分配給 collections 的空間大小,而 fileSize 則是資料實際儲存在硬碟中時所使用到的空間大小,單位都是位元組(bytes)。
[mongodb] mongodb 教學
分類:mongodb