MongoDB学习笔记(入门)
一、文檔的注意事項:
1.? 鍵值對是有序的,如:{ "name" : "stephen", "genda" : "male" } 不等于 { "genda" : "male", "name" : "stephen" }
2.? 文檔信息是大小寫敏感的,如:{ "name" : "stephen" } 不等于 { "Name" : "stephen" }
3.? 文檔信息是區分類型的,如:{ "age" : 30 } 不等于 { "age" : "30" }
4.? 文檔中不能出現重復鍵,如:{ "name" : "stephen", "name" : "liu" }
?
二、使用多個集合的必要性:
1.? 如果把各種模式的文檔存放在一個集合中,對于開發者來說是非常災難的。因為在獲取到查詢結果之后,就需要手工編寫代碼過濾不同類型的文檔了。
2.? 會使查詢效率降低。試想一下,假設某個模式的文檔的數據量相對較少,如果仍然將其放到一個通用的大集合中,其查詢效率勢必會大大低于將其放到獨立的集合中。
3.? 在創建索引時,如果所有的文檔均為同一模式,那么索引的利用率將會更加高效。
?
三、集合的命名注意事項:
1.? 集合名不能是空字符串""。
2.? 不要以system開頭,這一般是為系統保留的,如system.users集合中保存了數據庫的用戶信息,而system.namespace集合中保留了數據庫集合的信息。
3.? 不要在集合名里面包含'$'字符。
4.? 子集合只是一種較好的集合規劃方式,如blog.posts和blog.anthurs,實際上它們和blog集合之間沒有任何關系,甚至blog集合可以不存在。
?
四、數據庫:
在同一個MongoDB服務器中可以存在多個數據庫,每個不同的數據庫存儲在不同的文件中。又由于數據庫名和文件名是綁定的,因此數據庫名會有一些限制。
1.? 不能是空字符""。
2.? 全部小寫且不超過64字節。
3.? 不得含有文件名命名中的非法字符。
4.? admin數據庫是管理數據庫,如果某個用戶位于該數據庫中,他將自動繼承所有數據庫權限。一些特定的服務器命令也只能從這個數據庫運行。
5.? local這個數據庫永遠不會被復制,只是用于存儲限于本地單臺服務器的任意集合。
6.? 數據庫名.集合名,表示該集合的完全限定名,其長度不要超過121自己。
?
五:MongoDB的啟動:
1.? 直接執行mongod即可,在沒有任何命令行參數的情況下,服務器的主機中必須包含/data/db目錄,對于Windows而言,其缺省目錄則為服務程序所在驅動器的\data\db。如D盤,則為D:\data\bin。缺省監聽端口為27017。
2.? MongoDB自帶了一個JavaScript Shell,可以從命令行與MongoDB交互。如:mongo。這個Shell工具可以直接執行簡單的數學運算。如:
??? > x = 200
????200
????> x /5
?? ?40
??? --還可以調用JavaScript的標準庫。
??? > new Date("2012/05/05")
??? ISODate("2012-05-04T16:00:00Z")
??? > "Hello World".replace("World", "MongoDB")
?? ?Hello MongoDB
??? --定義和調用自定義的JavaScript函數。
????> function factorial(n) {
? ??... if (n <= 1) return 1
?? ?... return n * factorial(n - 1)
??? ... }
??? > factorial(5)
??? 120
3.? 在Shell客戶端插入MongoDB的文檔,如:
??? > post = { "title" : "my blog post", "content" : "Here's my blog", "date" : new Date() }
??? {
???????? "title" : "my blog post",
???????? "content" : "Here's my blog",
???????? "date" : ISODate("2012-06-04T07:38:51.345Z")
??? }
?? ?> db.blog.insert(post)
??? > db.blog.find()
??? { "_id" : ObjectId("4fcc661de4bcbac15b3d9e3a"), "title" : "my blog post", "content" : "Here's my blog",
??? "date" : ISODate("2012-06-04T07:38:51.345Z") }
4.? 在Shell客戶端查詢文檔,如:
??? > db.blog.findOne()
??? {
???????? "_id" : ObjectId("4fcc661de4bcbac15b3d9e3a"),
???????? "title" : "my blog post",
???????? "content" : "Here's my blog",
???????? "date" : ISODate("2012-06-04T07:38:51.345Z")
??? }
5.? 在Shell中更新文檔,如:
??? --需要先更新post變量的內容,即先增加了一個comments的鍵,其值為空數組。
??? > post.comments = []
??? [ ]
??? --update的第一個參數是條件,第二個參數是待更新的值。
??? > db.blog.update({ "title" : "my blog post"}, post)
??? > db.blog.findOne()
??? {
???????? "_id" : ObjectId("4fcc661de4bcbac15b3d9e3a"),
???????? "title" : "my blog post",
???????? "content" : "Here's my blog",
???????? "date" : ISODate("2012-06-04T07:38:51.345Z"),
???????? "comments" : [ ]
??? }
6.? 在Shell客戶端中刪除,如:
??? --如果remove中沒有條件,則清除集合中的全部數據。
??? > db.blog.remove( { title:"my blog post"})
??? > db.blog.findOne()
??? null
?
六、Shell的使用小技巧:
??? > show dbs? --顯示數據庫名。
??? > show collections --顯示集合名
??? > show users --顯示用戶名
??? > db.help()? --列出數據庫的方法。
??? > db.blog.help() --列出blog集合上的方法。
??? > db.blog.update --可以直接看update方法的JavaScript實現代碼。
轉載于:https://www.cnblogs.com/ldms/p/6220709.html
總結
以上是生活随笔為你收集整理的MongoDB学习笔记(入门)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奔驰蹭掉一点漆 补要多少钱大概
- 下一篇: switch能使用的数据类型有6种