1. 程式人生 > 其它 >MongoDB初探第二篇 (r4筆記第82天)

MongoDB初探第二篇 (r4筆記第82天)

與sql語句的簡單對比 在第一篇中分享了一些MongoDB的基本知識點,因為安裝執行其實都還是很輕巧的,所以對於大家上手來說應該問題不大,但是安裝完成,資料庫也可以連線了,但是MongoDB中是沒有辦法執行sql語句的。這個時候關係型資料庫中的一些思維直接移植過來就不適用了,但是大道至簡,其實道理還是相同的,對於的資料的操作可以通過api來完成,這個從某種程度上來說,是MongoDB的亮點也是另外一種優勢。 我簡單的總結了一下常用的sql語句的一些用法在MongoDB中改怎麼使用。 首先一個很大的不同是,在MongoDB中,沒有表的概念,都是以collection為基本的單位儲存的。可以通過show collections來檢視當前的資料庫中存在的collections > show collections startup_log system.indexes system.profile

我們來看看增刪改查的用法。 insert 原本sql語句中的類似下面的語句 insert into test values(100,'test1'); 在MongoDB中可以使用如下的方式來實現,我們多插入一些資料。 db.test.insert({id:11,name:"test1"}); db.test.insert({id:12,name:"test2"}); db.test.insert({id:13,name:"test3"}); db.test.insert({id:14,name:"test4"}); db.test.insert({id:15,name:"test5"}); db.test.insert({id:16,name:"test6"});
檢視一下資料的情況。 > db.test.find(); { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" }
這個時候檢視collections會發現,已經建立好了這個collection > show collections startup_log system.indexes system.profile test 還有一種插入方式,如果注意到上面的資料話,會發現有一個隱含列_id,如果需要手動指定_id列的值,可以使用save方法。 > db.test.save({_id:100001,id:11,name:"test_new"}) WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 100001 }) 檢視新插入的資料,注意_id的值 > db.test.find(); { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" } { "_id" : 100001, "id" : 11, "name" : "test_new" } delete 如果需要刪除_id為100001的列的話,可以使用如下的方法 > db.test.remove({_id:100001}) WriteResult({ "nRemoved" : 1 }) > db.test.find(); { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 13, "name" : "test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" } update 我們嘗試修改name列為test3的資料,修改id為18 > db.test.update({name:"test3"},{$set:{id:18}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.test.find(); { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" } or的使用方法 在sql where字句中,經常會有or這樣的過濾條件 我們來簡單模擬一下 name為test或者name為test2的資料 > db.test.find({"$or":[{name:"test1"},{name:"test2"}]}) { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } and的使用方法 我們來模擬一下name為test1並且name為test2這樣的資料,這樣的資料應該不存在,以下是一個錯誤的例子。 > db.test.find({name:"test1"},{name:"test2"}) { "_id" : ObjectId("550edf9b14fce649885d6489"), "name" : "test1" } 正確的用法應該這麼寫。 模擬name為test1並且id為11的資料 > db.test.find({"$and":[{name:"test1"},{id:11}]}) { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } rownum > db.test.find().limit(2); { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } count > db.test.count(); 6 order by 注意排序的情況 > db.test.find().sort({name:-1}) { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } > db.test.find().sort({name:1}) { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" } in 的使用 得到name在test1,test2,test3的資料 > db.test.find({'name' : {'$in' : ["test1", "test2", "test3"]}}); { "_id" : ObjectId("550edf9b14fce649885d6489"), "id" : 11, "name" : "test1" } { "_id" : ObjectId("550edf9b14fce649885d648a"), "id" : 12, "name" : "test2" } { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" } > not in的使用 > db.test.find({'name' : {'$nin' : ["test1", "test2", "test3"]}}); { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" } 大於等於。。的使用 id大於14的資料 > db.test.find({id: {$gte: 14}}); { "_id" : ObjectId("550edf9b14fce649885d648b"), "id" : 18, "name" : "test3" } { "_id" : ObjectId("550edf9b14fce649885d648c"), "id" : 14, "name" : "test4" } { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } { "_id" : ObjectId("550edf9b14fce649885d648e"), "id" : 16, "name" : "test6" } like的使用 > db.test.find({name:/5/}); { "_id" : ObjectId("550edf9b14fce649885d648d"), "id" : 15, "name" : "test5" } distinct distinct的使用,不過和sql中還是存在一定的差距,有點mapreduce的味道。 > db.test.distinct('name'); [ "test1", "test2", "test3", "test4", "test5", "test6" ]