從本身的另外一處博客移動過來。長期維護,不按期添加新內容。linux
mongoDB按照分類應當是非關係型數據庫,這種數據庫沒有傳統sql那樣的表的概念,天然也不支持多表查詢。sql
官方的linux安裝文檔在這裏mongodb
安裝方法無外乎是兩種:docker
一種是下載源文件,而後手動安裝;另外一種是經過包管理器進行安裝。數據庫
介紹經過包管理在ubuntu上安裝:ubuntu
向包管理系統導入公鑰windows
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
建立文件列表(這裏是16.04,不一樣版本此處有差異)服務器
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
更新包數據性能
sudo apt-get update
安裝最新的穩定版測試
sudo apt-get install -y mongodb-org
經過啓動服務命令,而後就能夠運行mongodb了。
拉取鏡像:
docker pull mongo:latest
建立、運行一個容器:
docker run -p 27017:27017 -d mongo:latest #其餘參數自定
首先是docker自身的不穩定性,會致使數據丟失。典型的就是有時候容器壞了拉不起來,而後要從新配置。全部的數據天然而然是沒有了。
其次是效率。相對於直接使用,性能有所損耗,在大量寫入的時候耗時多。
不推薦盲目地在生產中使用docker下的mongoDB。作測試是能夠的。
在官方網站上下載mongoDB,最新的版本只支持64位。
打開安裝包,選擇「Custom」自定義安裝,安裝路徑能夠修改到非系統盤。而後不斷「下一步」,安裝至結束。
建立數據庫文件的存放位置
由於啓動mongodb服務以前須要必須建立數據庫文件的存放文件夾,不然命令不會自動建立,並且不能啓動成功。數據存放的位置也是比較隨意的。命令行中使用以下命令啓動mongodb服務:mongod --dbpath 數據存放位置的絕對地址
,命令行中會看到一些初始化的內容。若是不成功,能夠查看一下端口是否被佔用。
命令行下運行MongoDB服務器或者配置MongoDB服務,二者任選一個方式啓動就能夠了。
新建一個mongo.config並輸入(dbpath是數據存儲的地址,logpath是記錄日誌的地址。):
dbpath=D:\data logpath=D:\MongoDB\mongo.log
在管理員CMD下輸入:mongod --config mongo.config --install --serviceName "MongoDB"
。即根據剛建立的mongo.config配置文件安裝服務,名稱爲MongoDB。
以後就能夠經過命令或者在「服務」中控制MongoDB了。
啓動MongoDB服務 net start MongoDB 關閉MongoDB服務 net stop MongoDB
以前一直使用一個叫robo3t的GUI管理軟件,功能中規中矩。雖然版本不是很新,測試是能夠兼容最新的mongoDB的。
推薦使用官方自帶的MongoDB Compass
。簡潔,強大。在安裝mongoDB以後會提示安裝。
若是沒有的話,可到在MongoDB的官網上下載,下載須要填寫一點信息,能夠瞎填,提交就會開始下載。國家最好選在中國或者附近,上次選了大洋彼岸的國家,下載地址根本訪問不到。
操做 關係型 MongoDB database database 數據庫/數據庫 table collection 數據表/集合 row document 數據記錄行/文檔 column field 數據字段/域 index index 索引/索引 table joins 錶鏈接/MongoDB不支持 primary key primary key 主鍵/MongoDB自動將_id字段設置爲主鍵
附帶了SQL語句,以便理解。
查詢全部表中信息
db.users.find() select * from users
條件查詢
db.users.find({"username" : "joe", "age" : 27}) select * from users where "username" = "joe" and age = 27
依據條件查詢全部信息
db.users.find({}, {"username" : 1, "email" : 1}) select username, email from users #明確注意禁止_id值的返回 db.users.find({}, {"username" : 1, "_id" : 0})
數值範圍條件查詢
#$lt(小於) $lte(小於等於) $gt(大於) $gte(大於等於) db.users.find({"age" : {"$gte" : 18, "$lte" : 40}}) select * from users where age >=18 and age <= 40
不等條件查詢
db.users.find({"username" : {"$ne" : "joe"}}) select * from users where username <> "joe"
表範圍查詢
db.users.find({"ticket_no" : {"$in" : [725, 542, 390]}}) select * from users where ticket_no in (725, 542, 390) db.users.find({"ticket_no" : {"$nin" : [725, 542, 390]}}) select * from users where ticket_no not in (725, 542, 390)
同集合多條件查詢
db.users.find({"$or" : [{"ticket_no" : 725}, {"winner" : true}]}) select * form users where ticket_no = 725 or winner = true
安裝pymongo
pip install pymongo
導入模塊
import pymongo
僅作客戶端操做的時
from pymongo import MongoClient
創建鏈接
conn = MongoClient('192.168.0.111', 27017) 或者 conn = MongoClient('192.168.0.111:27017')
鏈接至數據庫
db = conn.mydb 或者 db = conn['mydb']
mydb爲所要鏈接的數據庫,若是不存在,則建立數據庫。
鏈接選擇數據集合
myset = db.test 或者 myset = conn.mydb.test
test爲所要使用的集合,沒有則自動建立。
查看所有集合
db.collection_names()
查看指定集合中某條記錄
db.Account.find_one({"key":"value"})
查看指定集合的字段
db.Account.find_one({},{"k1":v1,"k2":"v2"})
查看指定集合中多條記錄
for item in db.Account.find(): item for item in db.Account.find({"Name":"li"}): item["Name"]
查看指定集合記錄統計
db.Account.find().count() db.Account.find({"key":"value"}).count()
集合查詢結果排序
db.Account.find().sort("Name") #默認爲升序 db.Account.find().sort("Name",pymongo.ASCENDING) #升序 db.Account.find().sort("Name",pymongo.DESCENDING) #降序
集合查詢結果多列排序
db.Account.find().sort([("Name",pymongo.ASCENDING),("add",pymongo.DESCENDING)])
還有一個find_one()的方法,返回符合條件的一條記錄,而find()則是返回返回全部可能的內容。
一般在須要隨機抽出一條內容的狀況下使用find_one()更實用。
更高級的擴展
下面方法在執行完相應第一個的操做以後,會附加進行另外一個操做。
查找以後進行刪除
find_one_and_delete()
查找以後進行更新
find_one_and_update()
查找以後進行替換
find_one_and_replace()
添加記錄
db.Account.insert({"ID":21,"Name":"Ling"})
修改記錄
db.Account.update({"User":"li"},{"$set":{"add":"BJ","pw":"123"}})
刪除記錄
db.Account.remove() #所有刪除 db.Test.remove({"key":"value"}) #指定刪除