做者 changhao
郵箱 <wu_chang_hao@qq.com>
版本1.0
1). 下載安裝包html
MongoDB 提供了可用於 32 位和 64 位系統的預編譯二進制包,你能夠從MongoDB官網下載安裝,MongoDB 預編譯二進制包下載地址:https://www.mongodb.com/downl...python
2). 安裝mysql
指定安裝路徑,我這裏安裝在D:\software\mongodb,添加D:\software\mongodb\bin到環境變量中。正則表達式
3). 新建目錄與文件夾sql
D:\software\mongodb\data\db D:\software\mongodb\log\mongod.log
4). 新建配置文件D:\software\mongodb\mongod.cfgmongodb
systemLog: destination: file path: "D:/software/mongodb/log/mongod.log" logAppend: true storage: journal: enabled: true dbPath: "D:/software/mongodb/data/db" net: bindIp: 0.0.0.0 port: 27017 setParameter: enableLocalhostAuthBypass: false
5). 製做系統服務shell
mongod --config "D:\software\mongodb\mongod.cfg" --bind_ip 0.0.0.0 --install
或者直接在命令行指定配置數據庫
mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\software\mongodb\log\mongod.log --logappend --dbpath D:\software\mongodb\data\db --serviceName "mongodb" --serviceDisplayName "mongodb" --install
6). 啓動MongoDB服務windows
net start MongoDB net stop MongoDB
7). 登陸MongoDB服務器
mongo 連接:http://www.runoob.com/mongodb/mongodb-window-install.html 當沒有帳號密碼登陸的時候,默認就是管理員登陸。,由於剛剛作系統服務install的時候沒有指定 --auth(沒有指定則沒有權限認證這一說),(至關於mysql跳過受權表啓動同樣)
8). 建立有權限的用戶
use admin db.createUser( { user: "root", # 這個root能夠隨便寫 pwd: "123", roles: [{role: "root", db: "admin"}] # 權限,role是root說明是管理員, } ) use test db.createUser( { user: "test", pwd: "123", roles: [ {role: "readWrite", db: "test"}, # 針對test庫有讀寫權限,操做本身的庫有讀寫權限 {role: "read", db: "db1"} ] # 針對db1庫讀權限,操做其餘庫有讀權限 } )
9). 重啓數據庫
mongod --remove mongod --config "D:\software\mongodb\mongod.cfg" --bind_ip 0.0.0.0 --install --auth # 或者 mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\software\mongodb\log\mongod.log --logappend --dbpath D:\software\mongodb\data\db --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
10). 從新登陸
# 方式一 mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin" # 方式二:在登陸以後用db.auth("帳號","密碼")登陸 mongo use admin db.auth("root","123")
1). 安裝依賴
yum install -y libcurl openssl
2). 下載MongoDB源碼安裝或yum管理器安裝
# mongodb源碼下載地址 https://www.mongodb.com/download-center#community # 或yum 安裝 yum install -y mongodb
3). 建立數據庫目錄
# 建立目錄,並設置用戶權限 mkdir -p /var/lib/mongo mkdir -p /var/log/mongodb chown `whoami` /var/lib/mongo chown `whoami` /var/log/mongodb
4). 配置mongo服務參數, 容許全部ip訪問
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --bind_ip_all --fork
5). 或者修改配置文件 /etc/mongod.conf
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: /var/lib/mongo journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # network interfaces net: port: 27017 bindIp: true # how the process runs processManagement: timeZoneInfo: /usr/share/zoneinfo
6). 後臺啓動
mongod -f /etc/mongod.conf &
7). 登陸mongodb
# 登陸 mongo # 建立數據庫 test use test # 查看當前的數據庫 db
# 鏈接到任何數據庫config mongo 127.0.0.1:27017/config # 不鏈接任何數據庫 mongo --nodb # 啓動以後,在須要時運行new Mongo(hostname)命令就能夠鏈接到想要的mongod了 conn = new Mongo('127.0.0.1:27017') db = conn.getDB('admin') # 顯示當前數據庫全部的數據庫 show databases 或者 show dbs # 使用某個數據庫,不存在則建立 use database # 刪除數據庫 db.dropDatabase()
在MongoDB中相關術語的解釋和sql術語對應關係
SQL術語 | MongoDB術語 | 解釋/說明 |
---|---|---|
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據庫記錄行/文檔 |
column | field | 數據字段/域 |
index | index | 索引 |
table joins | 錶鏈接,MongoDbB不支持 | |
primary key | primary key | 主鍵,MongoDB自動將_id字段設置主鍵 |
有一些數據庫名是保留的,能夠直接訪問這些特殊做用的數據庫
use test # 增長表內容 db.table1.insert({"a":1}) db.table2.insert({"b":2}) # 查看錶 show collections 或者 show tables # 刪除 db.user.info.help() # 查看幫助 db.user.info.drop() # 幫助, 不明白就help() db.table.help() # 舉例
# 插入單條數據 user0 = { "name": "changhao", "age": "23", "hobbies": ['music', 'read', 'dancing'], "addr": { "country": 'China', "city": 'BJ', } } # 方式一 db.table1.insert(user0) # 方式二 db.table1.insertOne(user0) # 插入多條數據 user1 = { "_id": 1, "name": "changhao1", "age": "23", "hobbies": ['music', 'read', 'dancing'], "addr": { "country": 'China', "city": 'BJ', } } user2 = { "_id": 2, "name": "changhao2", "age": "23", "hobbies": ['music', 'read', 'dancing'], "addr": { "country": 'China', "city": 'BJ', } } # 方式一 db.table1.insertMany(user1, user2) # 方式二 db.table1.insertMany([user1, user2])
# 查看全部記錄 db.table1.find() # 美化輸出 db.table1.find().pretty() # 查找符合條件的全部 db.table1.find({"name": "changhao"}) # 查找符合條件的第一條 db.table1.findOne({"name": "changhao"})
# id = 1 db.table1.find({"_id":1}) # id != 1 db.table1.find({"_id": {"$ne": 1}}) # id < 2 db.table1.find({"_id": {"$lt": 1}}) # id > 1 db.table1.find({"_id": {"$gt": 1}}) # id >= 1 db.table1.find({"_id": {"$gte": 1}}) # id <= 2 db.table1.find({"_id": {"$lte": 1}})
#邏輯運算:$and,$or,$not # id >=3 and id <= 4 db.table1.find({"_id": {"$gte":3, "$lte":4}}) # id >=3 and id <=4 and age >=40 db.table1.find({ "_id":{"$gte":3,"$lte":4}, "age":{"$gte":40} }) 或者 db.table1.find({"$and":[ {"_id":{"$gte":3,"$lte":4}}, # 一個字典就是一個條件 {"age":{"$gte":40}} ]}) # id >=0 and id <=1 or id >=4 or name = "changhao" db.table1.find({"$or": [ {"_id": {"$lte": 1, "$gte": 0}}, {"_id": {"$gte": 4}}, {"name": "changhao"} ]}) # id % 2 = 1 奇數 db.table1.find({"_id": {"$mod": [2, 1]}}) # 偶數, 取反 db.table1.find({"_id": {"$mod": [2, 1]}})
db.table1.find({ "name":/^jin.*?(g|n)$/i })
# 排序, 根據年齡排序, 1位正序, 1位倒序 db.table1.find().sort("age": 1) # 選取兩條數據 db.table1.find().limit(2) # 跳過查詢的數據的前2條 db.table1.find().skip(2) db.table1.sort({"age":-1}).skip(0).limit(2)
語法格式以下
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
參數說明:
實戰語句
# 1.覆蓋式 db.table1.update({'age': 20}, {"name": "changhao"}) # 2. 這一種簡單的更新,徹底替換匹配 var obj = db.table1.findOne({"_id": 2}) obj.username = obj.name + 'test' obj.age = 23 db.table1.update({"_id": 1}, obj)
設置
# 設置 $set 一般文檔只會有一部分須要更新。可使用原子性的更新修改器,指定對文檔中的某些字段進行更新。 更新修改器是種特殊的鍵,用來指定複雜的更新操做,好比修改、增長後者刪除 # set name="changhao" where id = 2 db.table1.update({'_id': 2}, {"$set": {"name": "changhao", "age": 23}, {"upsert":true}) # 沒有匹配成功則新增一條{"upsert":true} db.table1.update({'_id':2},{"$set":{"name":"changhao", "age":23}},{"upsert":true}) # 默認只改匹配成功的第一條,{"multi":改多條} db.table1.update({'_id':{"$gt":4}},{"$set":{"age":28}}) db.table1.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true}) # 修改內嵌文檔,把名字爲test的人所在的地址國家改爲Japan db.table1.update({'name':"test"},{"$set":{"addr.country":"Japan"}}) # 把名字爲test的人的地2個愛好改爲piao db.table1.update({'name':"test"},{"$set":{"hobbies.1":"piao"}}) # 刪除test的愛好,$unset db.table1.update({'name':"test"},{"$unset":{"hobbies":""}})
# 增長和減小 $inc # 1.全部人年齡增長一歲 db.table1.update({}, { "$inc":{"age":1} }, { "multi":true } ) # 2.全部人年齡減小5歲 db.user.update({}, { "$inc":{"age":-5} }, { "multi":true } )
# 刪除多箇中的第一個 db.table1.deleteOne({"age":8}) # 刪除國家爲China的所有 db.table1.deleteMany({"addr.country": "China"})
import pymongo client = pymongo.MongoClient("192.168.158.137", 27017) # 顯示服務器上的全部數據庫 dblist = client.database_names() print(dblist) # 打印信息:['admin', 'config', 'local', 'test'] # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立 db = client['test']
# 增長單條 mydict = {"name": "changhao001", "age": 23} res = db.table1.insert_one(mydict) print(res.inserted_id) # 返回ObjectId對象 # 增長多條 mylist = [{"name": "changhao002", "age": 23}, {"name": "changhao003", "age": 23}] res = db.table1.insert_many(mylist) print(res.inserted_ids) # 返回ObjectId對象列表
查詢一條語句
# 查詢一條數據 res1 = db.table1.find_one({'name': 'changhao1'}) print(res1.items()) # 查看匹配的數據內容
查詢集合中的全部數據或多條
# 查詢集合中的全部數據或多條 res2 = db.stu.find({}) # 查詢全部記錄 res3 = db.stu.find({"age": 23})
高級查詢
# 年齡大於20歲的 myquery = {"age": {"$gt": 20}} res = db.table1.find(myquery)
正則表達式查詢
# 讀取 name 字段中第一個字母爲 "c" 的數據 myquery = {"name": {"$regex": "^c"}} res = db.table1.find(myquery) # 遍歷出匹配的數據 for x in res: print(x)
查詢結果排序,跳過, 截取條數
# 查詢結果的排序,跳過,和截取 sort_res = list(db.table1.find().sort("age", pymongo.DESCENDING)) # 查詢全部結果,並根據年齡的降序排序 skip_res = list(db.table1.find().skip(2)) # 查詢全部結果,並過濾掉前兩條 limit_res = list(db.table1.find().limit(2)) # 查詢全部結果,並截取前兩條 # 分頁效果 pagination_res = list(db.table1.find().sort("age", pymongo.DESCENDING).limit(2).skip(2))
# 查詢到直接更新設置值 res = db.table1.update_one({'_id': 1}, {"$set": {"name": "changhao_update"}}) print(res.modified_count) # 查詢到記錄, 在字典中增長值 res = db.table1.find_one({"name": "changhao_update"}) res['age'] = 20 # 將值更新到記錄中 res = db.table1.update_one({"name": "changhao_update"}, {"$set": res}) print(res.modified_count)
刪除單條
# 刪除結果中的一條 res = db.table1.delete_one({"name": "changhao_update"}) print(res.deleted_count)
刪除多條
# 刪除多條, 正則匹配的數據 query = {"name": {"$regex": "^c"}} res = db.table1.delete_many(query) print(res.deleted_count) # 刪除全部 del_res = db.table1.delete_many({})