學習使用mongoDB和pymongo

来源:https://www.cnblogs.com/xiao3c/archive/2018/09/14/9646570.html
-Advertisement-
Play Games

[ ] 本文出處:http://b1u3buf4.xyz/ " ] 本文作者:[B1u3Buf4" [ ] 本文授權:禁止轉載 從自己的另一處博客移動過來。 前述和安裝 mongoDB按照分類應當是非關係型資料庫,這種資料庫沒有傳統sql那樣的表的概念,自然也不支持多表查詢。 linux 安裝 官方 ...




從自己的另一處博客移動過來。

前述和安裝

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

linux 安裝

官方的linux安裝文檔在這裡

安裝方法無外乎是兩種:

一種是下載源文件,然後手動安裝;另一種是通過包管理器進行安裝。

介紹通過包管理在ubuntu上安裝:

向包管理系統導入公鑰

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容器部署

拉取鏡像:

docker pull mongo:latest

創建、運行一個容器:

docker run -p 27017:27017 -d mongo:latest #其他參數自定

坑人的地方

首先是docker自身的不穩定性,會導致數據丟失。典型的就是有時候容器壞了拉不起來,然後要重新配置。所有的數據自然而然是沒有了。

其次是效率。相對於直接使用,性能有所損耗,在大量寫入的時候耗時多。

不推薦盲目地在生產中使用docker下的mongoDB。做測試是可以的。

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管理器

之前一直使用一個叫robo3t的GUI管理軟體,功能中規中矩。雖然版本不是很新,測試是可以相容最新的mongoDB的。

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

mongoDB和關係型資料庫不同之處

database     database     資料庫/資料庫
table        collection   數據表/集合
row          document     數據記錄行/文檔
column       field        數據欄位/域
index        index        索引/索引
table joins               表連接/MongoDB不支持
primary key  primary key  主鍵/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"}) #指定刪除

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 查詢某存儲過程的訪問情況 SELECT TOP 1000 db_name(d.database_id) as DBName, s.name as 存儲名字, s.type_desc as 存儲類型, d.cached_time as SP添加到緩存的時間, d.last_execution_t ...
  • [20180914]oracle 12c 表 full_hash_value如何計算.txt--//昨天在12c下看表full_hash_value與11g的full_hash_value不同,不過12c使用pdb,猜測跟PDB有關.--//通過測試說明問題.1.環境:SCOTT@book> @ & ...
  • 歡迎大家前往 "騰訊雲+社區" ,獲取更多騰訊海量技術實踐乾貨哦~ 本文由 "騰訊雲資料庫團隊 " 發表於 "雲+社區專欄" 作者介紹:簡懷兵,騰訊雲資料庫高級工程師,負責騰訊雲CDB內核及基礎設施建設;先後供職於Thomson Reuters和YY等公司,PTimeDB作者,曾獲一項發明專利;從事 ...
  • 登錄MySQL 添加新用戶 允許本地 IP 訪問 localhost, 127.0.0.1 允許外網 IP 訪問 刷新授權 為用戶創建資料庫 為新用戶分配許可權 授予用戶通過外網IP對於該資料庫的全部許可權 授予用戶在本地伺服器對該資料庫的全部許可權 刷新許可權 退出 root 重新登錄 用新帳號 test ...
  • 前言:Spark編程模型兩個主要抽象,一個是彈性分散式數據集RDD,它是一種特殊集合,支持多種數據源,可支持並行計算,可緩存;另一個是兩種共用變數,支持並行計算的廣播變數和累加器。 1.RDD介紹 Spark大數據處理平臺建立在RDD之上,RDD是Spark的核心概念,最主要的抽象之一。RDD和Sp ...
  • 直奔主題 xshell工具source導入幾個G的資料庫 1、先把sql文件通過ftp或者winscp上傳到伺服器對應站點根目錄,如圖所示 2、進入xshell界面,進入資料庫之前一定設定編碼,否者會報錯 輸入密碼 進入資料庫 進行 資料庫操作 查看 資料庫 show databases; 創建數據 ...
  • 如果有成熟的架構,如何根據資料庫關係的表、視圖等,進行代碼生成架構?減少寫代碼的時間? 主、外鍵關聯要考慮 實體類層: 數據處理層: 用於UI層要操作: ...
  • 啟用密碼 配置密碼,配置文件中添加節點requirepass,如下root即passwordrequirepass root可以在登陸的時候用-a 指定password登陸,也可以不指定,登陸之後使用auth執行密碼 備份還原 嚴格說Redis中的save並算是備份命令,save命令也只是將記憶體數據 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...