mongdb學習與使用

1. 基礎概念

  • MongoDB簡介:

    • MongoDB是一個基于文檔的NoSQL數據庫,具有高性能、高可用性和易擴展性。
    • 數據存儲在類似JSON的BSON格式中。
  • 基本術語:

    • Database(數據庫): 集合的容器。
    • Collection(集合): 文檔的容器,類似于關系型數據庫中的表。
    • Document(文檔): 數據的基本單元,類似于關系型數據庫中的行。

2. 安裝與設置

  • 安裝MongoDB:

    • 官方安裝指南
  • 啟動MongoDB服務:

    • Windows: mongod
    • Mac/Linux: sudo service mongod start
  • MongoDB Shell:

    • 連接MongoDB實例:mongo

3. 基本操作

  • 選擇數據庫:use share? 選中share的數據庫

  • 創建集合??db.createCollection("news") 創建一個名字為news的集合

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • 插入數據(文檔)? ?db.news.insertOne({ name: "Alice", age: 25, city: "New York" }) 像news這個集合中插入一條數據

  • 查詢文檔:

  • 查所有

  • db.news.find()?查找所有的文檔

  • 帶條件

  • db.news.find({ age: 25 })? 帶條件查找 查詢年齡為25的這一條數據

  • db.news.find({?age: { $gt: 20 }) 查詢年齡大于20歲的

  • db.news.find({age:{$gt:20}},{name:1,age:1,_id:0}) ?查詢年齡>20,且返回name,age字段,不返回_id字段

  • 排序

  • db.news.find().sort({age:-1}) ?按照年齡降序排序

  • db.news.find().sort({age:1}) ?按照年齡升序??????

  • 分頁

  • 跳過指定數量的文檔

    db.news.find().skip(10)

  • 限制返回的文檔數量

    db.news.find().limit(5)

  • 分頁查詢

    db.news.find().skip(10).limit(5)

  • 邏輯操作符

    • $and:與

      db.news.find({ $and: [ { age: { $gt: 20 } }, { age: { $lt: 30 } } ] }) 查詢大于二十小于三十

    • $or:或

    • db.news.find({ $or: [ { age: 25 }, { age: 30 } ] })

    • 查詢年齡是25跟30的那兩條

    • $not:非

      db.myCollection.find({ age: { $not: { $gt: 20 } } })

  • 數組操作符

    • $in:在指定數組中

      db.news.find({ age: { $in: [25, 30, 35] } })

    • $nin:不在指定數組中

      db.news.find({ age: { $nin: [20, 25, 30] } })

    • $all:包含數組中的所有元素

      db.news.find({ tags: { $all: ["red", "blue"] } })

  • 更新文檔?

  • db.news.updateOne({ name: "Alice" }, { $set: { age: 26 } })?更新語句用于在 news集合中查找 name 字段值為 "Alice" 的文檔,并將其 age 字段更新為 26。如果文檔中沒有 age 字段,則會添加這個字段。

  • 刪除文檔

  • db.news.deleteOne({ name: "Alice" }) 刪除所有 name 字段為Alice的文檔

4.Python整合mongdb

1.安裝pymongdb

pip install pymongdb

2.連接

from mongdb import MongClient

client =MongClient("localhost", 27017)

db = client['mydatabase'] ?選擇名為mydatabase的數據庫,沒有則自動創建

# 選擇集合(如果集合不存在,MongoDB會自動創建) ?
collection = db['mycollection']

3.就是做一些業務操作了,增刪改,這舉出一個分頁查詢的代碼

@bp.route('/list', methods=['GET'])
def list_documents():try:# 獲取分頁參數page = int(request.args.get('page', 1))per_page = int(request.args.get('per_page', 40))# 計算跳過的記錄數量skip = (page - 1) * per_page# 獲取集合with get_mongo_db() as m_db:collection = m_db.information# 查詢文檔并排序pipeline = [{"$sort": {"publish_date": -1}},{"$skip": skip},{"$limit": per_page},{"$project": {"full_title": 1,"report_type": 1,"publish_date": 1,"researcher": 1,"detail_link": 1,"_id": {"$toString": "$_id"}}}]documents = collection.aggregate(pipeline)# 將查詢結果轉換為列表documents_list = list(documents)# 獲取總記錄數total_documents = collection.count_documents({})# 計算總頁數total_pages = (total_documents + per_page - 1) // per_pageresult = {"documents": documents_list,"page": page,"per_page": per_page,"total_pages": total_pages,"total_documents": total_documents}return Success(message="查詢列表成功", result=result)except Exception as e:logger.error(e)return Fail('查詢失敗')

然后這里普及一下我踩的坑吧,

1.在插入數據的時候,會自動生成一個_id的對象,這是mongdb自動生成,且是唯一的,如果你

from bson ?improt Objectid

Objectid(id)

利用這個把前端傳的字符串id對象轉為Objectid,這樣才好去查詢

如果是返回的話,直接下面這樣操作

document['_id'] = str(document['_id'])

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40376.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

國產強大免費WAF, 社區版雷池動態防護介紹

雷池WAF,基于智能語義分析的下一代 Web 應用防火墻 使用情況 我司于2023年4月23日對雷池進行測試,測試一個月后,于2023年5月24日對雷池進行正式切換,此時版本為1.5.1。 里程碑紀念 后續一直跟隨雷池進行版本升級,當前…

QT_GUI

1、QT安裝 一個跨平臺的應用程序和用戶界面框架,用于開發圖形用戶界面(GUI)應用程序以及命令行工具。QT有商業版額免費開源版,一般使用免費開源版即可,下面安裝的是QT5,因為出來較早,使用較多&…

Python特征工程 — 1.4 特征歸一化方法詳解

目錄 1 Min-Max歸一化 方法1:自定義的Min-Max歸一化封裝函數 方法2: scikit-learn庫中的MinMaxScaler 2 Z-score歸一化 方法1:自定義的Z-score歸一化封裝函數 方法2: scikit-learn庫中的StandardScaler 3 最大值歸一化 4 L…

考研生活day1--王道課后習題2.2.1、2.2.2、2.2.3

2.2.1 題目描述: 解題思路: 這是最基礎的操作,思路大家應該都有,缺少的應該是如何下筆,很多同學都是有思路但是不知道如何下筆,這時候看思路的意義不大,可以直接看答案怎么寫,最好…

Java項目:基于SSM框架實現的游戲攻略網站系統分前后臺【ssm+B/S架構+源碼+數據庫+畢業論文+任務書】

一、項目簡介 本項目是一套基于SSM框架實現的游戲攻略網站系統 包含:項目源碼、數據庫腳本等,該項目附帶全部源碼可作為畢設使用。 項目都經過嚴格調試,eclipse或者idea 確保可以運行! 該系統功能完善、界面美觀、操作簡單、功能…

redhat7.x 升級openssh至openssh-9.8p1

1.環境準備: OS系統:redhat 7.4 2.備份配置文件: cp -rf /etc/ssh /etc/ssh.bak cp -rf /usr/bin/openssl /usr/bin/openssl.bak cp -rf /etc/pam.d /etc/pam.d.bak cp -rf /usr/lib/systemd/system /usr/lib/systemd/system.bak 3.安裝…

UB9A0全系統全頻高精度板卡性能指標

UB9A0 板卡是基于和芯星通自主研發的新一代射頻基帶及高精度算法一體化 GNSS SoC 芯片—Nebulas Ⅳ開發的全系統全頻點高精 OEM 板卡 ,支持 BDS,GPS, GLONASS,Galileo,QZSS,NavIC,SBAS&#xff…

linux c 應用編程定時器函數

在 Linux C 應用編程中,對于多線程編程中的定時器函數使用,通常可以借助 pthread 庫和系統提供的定時器相關的函數來實現。 首先,常見的定時器函數有 setitimer() 和 alarm() 。setitimer() 函數可以更精確地設置定時器,它可以設…

JAVA學習-練習試用Java實現“螺旋矩陣 II”

問題: 給定一個正整數 n ,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1: 輸入:n 3 輸出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2: 輸入&…

C++標準模板(STL)- 迭代器庫 - 流迭代器- 寫入 std::basic_streambuf 的輸出迭代器(二)

迭代器庫-流迭代器 迭代器庫提供了五種迭代器的定義,同時還提供了迭代器特征、適配器及相關的工具函數。 迭代器分類 迭代器共有五 (C17 前)六 (C17 起)種:遺留輸入迭代器 (LegacyInputIterator) 、遺留輸出迭代器 (LegacyOutputIterator) 、遺留向前迭代…

MySQL環境搭配

下載版本37滴 下載第二個 之后進行安裝 進入安裝界面 next 選擇默認的 進行下一步 安裝成功后,進行一系列配置,成功界面如下: 配置 MySQL8.0 環境變量 如果不配置 MySQL 環境變量,就不能在命令行直接輸入 MySQL 登錄命令。 步…

強烈推薦!12 組超驚艷的 Midjourney 風格提示詞!

前言 Midjourney 的 --sref random 隨機風格功能推出之后,出現了很多對不同代碼生成效果的探索。今天就為大家推薦 12 組我覺得非常驚艷的風格代碼,將它們添加在提示詞中,不需要寫復雜的關鍵詞就能得到高質量的指定風格,并且效果…

CUDA編譯配置中來自 CUDA 12.1.targets 的MSB3721錯誤和核函數調用語法錯誤‘<’解決及可用的代碼示例框架

今天開始整cuda編程處理圖像,好久沒玩cuda,又從小白開始。情況不妙,第一個工程坑不少,記錄一下如下2個重要的錯誤: (1)來自 CUDA 12.1.targets 的MSB3721錯誤 錯誤 命令““C:\Program Files\N…

Scrapy框架的基本使用教程

1、創建scrapy項目 首先在自己的跟目錄文件下執行命令: PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy startproject 項目名 具體執行操作如下:1、創建項目目錄:Scrapy會在當前工作目錄下創建一…

Git 操作總結

1. 安裝、Git 環境配置 1.1 安裝 Git 官方版本可以在 Git 官方網站下載:打開 https://git-scm.com/download/win,選擇相應版本即可。 Git 安裝完成后,可以在開始菜單中看到 Git 的三個啟動圖標(Git Bash、Git CMD、Git GUI&…

koa導出數據為csv文件給前端下載

后端代碼 async userActivityExport(ctx) {const limit ctx.query.limit || 2const offset ctx.query.offset || 0const UserActivity ctx.module.db().entity(userActivity)const findOption {}const ret await UserActivity.findMany_(findOption)const firtCol Objec…

QT5.12環境搭建與源碼編譯

一、概述 QT版本:QT5.12.10 Qt網址:http://download.qt.io/archive/qt/ 編譯平臺 ubuntu18.04 二、安裝交叉編譯工具鏈 1、獲取交叉編譯工具鏈 一般如果是編譯系統如果有對應的gcc 就是用這個就可以了 比如rk3128 lin…

【Qt】QTableWidget設置可以選擇多行多列,并能復制選擇的內容到剪貼板

比如有一個 QTableWidget*m_tbwQuery m_tbwQuery->installEventFilter(this); //進行事件過濾處理//設置可以選擇多行多列 m_tbwQuery->setSelectionMode(QAbstractItemView::MultiSelection); m_tbwQuery->setSelectionBehavior(QAbstractItemView::SelectItems); …

字符串相似度算法完全指南:編輯、令牌與序列三類算法的全面解析與深入分析

在自然語言處理領域,人們經常需要比較字符串,這些字符串可能是單詞、句子、段落甚至是整個文檔。如何快速判斷兩個單詞或句子是否相似,或者相似度是好還是差。這類似于我們使用手機打錯一個詞,但手機會建議正確的詞來修正它&#…

如何為老化的汽車鉛酸電池充電

一項小研究表明,汽車鉛酸電池不同于深循環或固定電池。汽車電池旨在限度地提高啟動電流容量,并且對深度放電或浮充(也稱為第 3 階段充電循環)反應不佳。起動電池的極板結構使表面積化,并且電解液比重 (SG) 高于其他電池,以提供高啟…