mongoDB的學習筆記

openkk 13年前發布 | 85K 次閱讀 MongoDB NoSQL數據庫 NOSQL

  最近在學習Mogodb,目前只是出于學習階段,還沒有在項目中實戰過,記錄一下下學習的總結。
----start----

基本概念:

1、文檔 --> 對應關系數據庫的行,也就是一條記錄。它比關系數據庫的行的功能要強大,更像是是某個具體的對象。文檔以一種Map的形式展現出來,當然value可以是任意的類型,也可以繼續是一個文檔(遞歸的定義)

2、集合 --> 對應關系數據庫的表。但是它又是無模式的,即文檔不要求一致。

基本操作:

1、顯示數據庫

show dbs

2、創建數據庫:

use yourDateBaseName 這就創建了一個數據庫。

不過你用show dbs,并不能顯示yourDataBaseName,因為這個數據庫沒有任何操作。所以如果你直接離開,則本數據庫會被廢除。

如果你插入一條記錄,此時就可以通過show dbs看到對應的數據庫

如下:

record = {"name" : "wang", "age" : 20, "password" : "123456"}

db.yourDateBaseName.yourTableName.insert(record)

這時使用show dbs就可以看到你的數據庫了

3、顯示數據庫

show collections。默認的包含system.indexes 表

4、創建集合:

因為mongodb中集合是無模式的,不像傳統的關系型數據庫是需要預先申明表包含哪些字段并且定義字段的屬性。雖有無需預先定義。使用的時候直接插入。可以見上面的例子。

5、刪除集合

db.yourDatabaseName.yourCollectionName.drop()

6、將文檔插入集合

record = {"name" : "wang", "age" : 20, "password" : "123456"}

db.yourDatabaseName.yourCollectionName.insert(record)

7、刪除集合中的文檔

db.yourDatabaseName,yourCollectionName.remove()

會清空此集合中的所有文檔

8、文檔更新

Mongo中的更新有兩種

一種是:用新的文檔去替換舊的文檔。【就是通過條件先將滿足條件的選出來該文檔,修改完之后替換舊的文檔】,個人不喜歡這種操作,違背了原子性啊。

另外一種:采用Mongo的修改器對文檔進行修改。

修改器列表:

8.1、“$set”修改器:用了指定一個健的值。如果健不存在,就創建它。

   Example:

db.myMongodb.user.update({"_id":ObjectId("4ed373c46d375f1a1960ed07")}, {"$set" : {"sex" : "male"}})

       “$unset”刪除某個健

       Example:

             db.myMongodb.user.update({"_id":ObjectId("4ed373c46d375f1a1960ed07")},  {"$unset" : {"sex" : 1}})

 8.2、“$inc”修改器用了增加已有的健的值,或者在鍵不存在的時候創建一個健。

Example:

     db.myMongodb.user.update({"_id":ObjectId("4ed373c46d375f1a1960ed07")},  {"$inc" : {"age" : 1}}) 

Tips: $inc 只能用于整數,長整數和雙精度浮點數。其他數會導致失敗。

     8.3、“$push”會向已有的數組末尾加入一個元素,要是沒有就會創建一個新的數組。

Example:

db.myMongodb.user.update({"_id":ObjectId("4ed373c46d375f1a1960ed07")},

        {$push : {"comments" : "this is my comments"}})

     8.4、“$ne”not equal判定器,【判定給定的屬性不等于給定值】

Example:

db.myMongodb.user.update({"comments" : {"$ne" : "this is comments"},

{$push : {"comments" : "your comments"}})

     8.5、“$addToSet”在不重復的情況下添加

Example:

db.myMongodb.user.update({"_id":ObjectId("4ed373c46d375f1a1960ed07")},

{"$addToSet" : {"comments" : "your comments"}})

     8.6、“$each”數組遍歷修改器

Example:

db.myMongodb.user.update({"_id":ObjectId("4ed373c46d375f1a1960ed07")},

{"$addToSet" : {"comments" : {"$each" : ["a commnet", "b comment"]}}})

 8.7、“$pop”修改器,從數組中刪除任何一端刪除元素

Example:

{$pop : {key : 1}}從數組末尾刪除一個元素

{$pop : {key : -1}}從數組頭部刪除

     8.8、數組定位修改器

Example:

db.myMongodb.user.update({"comments.author" : "john"},

{"$set" : {"comments.$.author" : "jim"}})

定位到第一個john的第一條評論

9、特殊的更新or插入 upsert

Upsert的特點是如果存在就更新,如果不存在就根據update的條件插入一條新的記錄

10、批量更新

需要設置update的第四個參數為true,否則默認更新第一個匹配的文檔

11、得到上一條命令的執行結果
    db.runCommand({getLastError : 1})

實驗室從去年開始接觸Nosql,不過那個時候自己不是負責這部分的所以只是介于組會的時候討論了解。后來去實習,這個東東越來越火了。以至于俺覺得自己也要去學習一下,這些天一直看這方面的東西。最大的感覺就是它組織結構的變化帶來的方便,這也是算是膚淺的感覺吧,新手一般都有這樣的體驗,至于網上一直叫好的速度快(據說比傳統的關系型數據庫快5倍左右),由于木有實戰的體驗,目前還木有深刻的認識。前段時間一直在做一個MIS系統,被數據庫折騰的卻是夠嗆,數據庫設計的人太過考慮各種范式,以至于開發困難很多。在看看mogodb確實給人煥然一新的感覺。呵呵。目前感覺就是這么多,繼續記錄一下自己的學習的筆記,這部分主要是mogodb的查詢操作。mogodb的查詢功能確實比標準的sql強大很多,特別是各種修改器和基于js函數的$where查詢。
----start----

Mongodb的查詢操作

1、查詢全部集合

db.myMongodb.post.find() 

如果是console的話,默認顯示20條記錄

2、返回指定的鍵

db.myMongodb.post.find({}, {"foo" : 1, "baz" : 1})

返回鍵foo和健baz,同時默認返回_id鍵的值

3、指定不返回的鍵

db.myMongodb.post.find({}, {"foo" : 0})

返回除foo之外的其他鍵

4、判定條件查詢

a) “$lt” 小于

b) “$lte”小于等于

c) “$gt”大于

d) “$gte”大于等于

e) “$ne”不等于

db.myMongodb.user.find({"age" : {"$gte" : 18, "$lte" : 30}})

5、其他條件查詢

a) “$in” :是否在某一個集合的查詢

db.myMongodb.user.find({"age" : {"$in" : [17,18,19]}})

b) “$nin”:與in相對應,不處于某個結合的文檔

c) “$or”:多條件查詢

db.myMongodb.user.find({"$or" : [{"age" : 17}, {"age" : 18}]})

d) “$not”非的情況下使用。其他條件可以基于它

e) “$mod”取模查詢

f) “$null”可以匹配值為null的字段,同時也能匹配鍵不存在的文檔

如果同時要判定鍵存在,需要加上"$exists" 判定

6、查詢數組

a) “$all” 通過多個元素匹配數組

db.myMongodb.food.find({"fruit" : {"$all" : ["apple", "oracle"]}})

b) 數組下標匹配

db.myMongodb.food.find({"fruit.2" :  "peach"})

c) "$size"數組長度匹配 

db.myMongodb.food.find("fruit" : {"$size" : 3})

7、"$slice"指定返回集合的個數

db.myMongodb.posts.find(criteria, {"$silce" : n})

n = 10 返回前10條記錄

n = -10 返回后10條記錄

n = [23, 10] 返回從23條記錄開始的10條記錄,感覺應該可以做分頁

8、采用點表示法查詢內嵌文檔(推薦)

db.myMongodb.find({"name.first" : "Wang", "name.last" : "Hai"})

9、采用分層的方式查詢

db.myMongodb.find({"name" : {"first" : "Wang, "last" : "Hai""}})

10、$where查詢

$where查詢非常強大,它可以添加js的函數實現高級的查詢功能。

基本樣式如下:

db.myMongodb.find({"$where" : function() {}})

如果function返回true,該記錄就返回。否則就不返回。


轉自: http://www.blogjava.net/zhenxuanpan/archive/2011/12/01/365244.html

</div> </div> </div>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!