1. 程式人生 > >ubuntu下mongodb操作部分整理

ubuntu下mongodb操作部分整理

在ubuntu終端下輸入mongo,可以看到自己電腦上安裝的mongodb的版本。

$mongo 192.168.x.x即可進入資料庫(不需要使用者名稱和密碼就能訪問的資料庫)

$ssh [email protected]回車就會提示輸入密碼,輸入密碼就能進入資料庫。(需要使用者名稱、密碼登陸的資料庫)(name 為使用者名稱)

show dbs 顯示mongodb伺服器下的各個資料庫列表名稱

use name (name 為資料庫名稱)

在進入相應的資料庫後,輸入 show collections 即可看到該資料庫下的各個資料夾(我最開始的mongodb版本為2.4.9,輸入這個命令不顯示資料庫下的檔名稱,升級到3.x後就可以了)

show collections

db.filename.find()

其中,filename為上一操作後返回的檔名稱,輸入此命令後可以檢視檔案資訊。

eq:

> db.test.find()
{ "_id" : ObjectId("57be736ccf28b40888c632be"), "123123" : "哈哈哈" }
>db.test.count() 可以獲取collection下的檔案總數

help檢視命令提示:

help
db.help()

檢視當前使用的資料庫:db.getName()

顯示當前db狀態:db.stats()

當前db版本:db.version()

檢視當前db的連結機器地址:db.getMongo()

建立一個聚集集合(table):db.createCollection(“collName”, {size: 20, capped: 5, max: 100})  //建立成功會顯示{“ok”:1}
//判斷集合是否為定容量db.collName.isCapped()

得到指定名稱的聚集集合(table):db.getCollection("account")

顯示當前db所有聚集索引的狀態:db.printCollectionStats()

查詢之前的錯誤資訊(即在本次與資料庫的互動操作中錯誤的無效操作):db.getPrevError()

清除錯誤記錄:db.resetError()

上面這些操作是我在使用的過程中用到的一些操作,親測可行,其實還有很多操作,如對使用者的管理、根據欄位進行查詢、修改等,但是我暫時不需要就沒有嘗試。上面這些操作對於瞭解你所要使用的資料庫是很有幫助的,通過這些操作你可以清楚資料庫下有什麼檔案,檔案的欄位資訊等,只有瞭解了這些資訊你才能進行下一步的資料存取。

但是原文內容較多,故根據個人需要刪除了部分操作,同時又添加了部分自己在使用過程中用到的其他操作。

利用pymongo進行mongodb資料庫的部分操作:(可互動操作)

>>>from pymongo import MongoClient

>>>import gridfs

>>>client=MongoClient('192.168.x.x')

>>>db=client['dbname']  #dbname為此伺服器下的某一資料庫名稱

>>>fs=gridfs.GridFS(db) 

>>>collection=db.test  #test為此資料庫下的某一資料集名稱,此操作獲取該資料集

>>>collection.find_one() #這句程式碼獲取資料集中的第一個物件資料

{u'_id': ObjectId('57be736ccf28b40888c632be'), u'123123': u'\u54c8\u54c8\u54c8'}  #此為輸出結果。

>>>collection.count()  #輸出該資料集下的物件總數

2341  #輸出結果

Querying for More Than One Document

To get more than a single document as the result of a query we use thefind()method.find() returns aCursor instance, which allows us to iterateover all matching documents. For example, we can iterate over everydocument in theposts collection:
<span style="font-size:14px;">>>> for post in posts.find({"author": "Mike"}):
...   post
...
{u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}
{u'date': datetime.datetime(2009, 11, 12, 11, 14), u'text': u'Another post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'bulk', u'insert']}</span>
Just like we did withfind_one(),we can pass a document tofind()to limit the returned results. Here, we get only those documents whoseauthor is “Mike”:
<span style="font-size:14px;">>>> for post in posts.find({"author": "Mike"}):
...   post
...
{u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}
{u'date': datetime.datetime(2009, 11, 12, 11, 14), u'text': u'Another post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'bulk', u'insert']}</span>

補充:(部分基礎知識,覺得很有必要了解)

一、文件的注意事項:

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教程之入門基本知識

整理的比較雜亂,但基本上都是比較常用的操作,根據個人需要整理了會用到的操作,僅供參考,如果需要更詳細的操作的話,而且英語閱讀能力尚可的情況下,建議直接看官網,不建議看別人寫的部落格,官網是寫的最詳細最準確的~