mongoDB和pymongo學習

前述

mongoDB按照分類應當是非關係型數據庫,這種數據庫沒有傳統sql那樣的表的概念,自然也不支持多表查詢。

安裝

linux 安裝

官方的linux安裝文檔在這裏

以ubuntu爲例,推薦使用apt install mongodb直接安裝。

docker容器部署

拉取鏡像:

docker pull mongo:latest

創建、運行一個容器(其他參數自行設置):

docker run -p 27017:27017 -d mongo:latest

Windows安裝

在官方網站上下載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

使用

GUI查看器

推薦使用官方的MongoDB Compass。簡潔,強大。在安裝mongoDB之後會提示安裝。

mongoDB和關係型數據庫不同之處

sql mongoDB 對應關係描述
database database 數據庫/數據庫
table collection 數據表/集合
row document 數據記錄行/文檔
column field 數據字段/域
index index 索引/索引
primary key _id 主鍵/MongoDB自動將_id字段設置爲主鍵

mongoDB基礎語法

附帶了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模塊用法

安裝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"}) #指定刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章