主頁 >  其他 > MongoDB(NoSQL) 非關系型資料庫

MongoDB(NoSQL) 非關系型資料庫

2020-12-16 16:07:27 其他

目錄
  • 簡單了解 mongoDB
    • mongoDB 特點
    • 下載與安裝
    • 可視化工具
  • 簡單使用mongoDB
    • 資料操作
    • 資料型別

簡單了解 mongoDB

# NoSQL 泛指非關系型的資料庫
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項全新的資料庫革命性運動,早期就有人提出,
發展至2009年趨勢越發高漲,NoSQL的擁護者們提倡運用非關系型的資料存盤,相對于鋪天蓋地的關系型資料庫運用,
這一概念無疑是一種全新的思維的注入,

MongoDB 是由C++語言撰寫的,是一個基于分布式檔案存盤的開源資料庫系統,旨在為 WEB 應用提供可擴展的高性能資料存盤解決方案,
在高負載的情況下,添加更多的節點,可以保證服務器性能,

MongoDB 是一個介于關系資料庫和非關系資料庫之間的產品,是非關系資料庫當中功能最豐富,最像關系資料庫的,

MongoDB 將資料存盤為一個檔案,資料結構由鍵值(key=>value)對組成,MongoDB 檔案類似于 JSON 物件,欄位值可以包含其他檔案,
陣列及檔案陣列,

官網:https://www.mongodb.com/

mongoDB 特點

MongoDB 是一個面向檔案存盤的資料庫,操作起來比較簡單和容易,

如果負載的增加(需要更多的存盤空間和更強的處理能力) ,它可以分布在計算機網路中的其他節點上這就是所謂的分片,

Mongo支持豐富的查詢運算式,查詢指令使用JSON形式的標記,可輕易查詢檔案中內嵌的物件及陣列,

MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言,
    
MongoDB允許在服務端執行腳本,可以用Javascript撰寫某個函式,直接在服務端執行,也可以把函式的定義存盤在服務端,下次直接呼叫即可,   

你可以在MongoDB記錄中設定任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實作更快的排序,
你可以通過本地或者網路創建資料鏡像,這使得MongoDB有更強的擴展性,

下載與安裝

  • 下載地址 https://www.mongodb.com/download-center/community

  • 安裝流程參考 點擊
  • 修改資料庫存盤位置
MongoDB 是一個面向檔案存盤的資料庫,個人電腦安裝可以考慮把資料存盤到D盤或E盤(非系統盤).

MongoDB 啟動  "mongod" #(修改環境變數后,可在命令框直接輸入mongod)
	- 指定 MongoDB 資料存盤目錄 --dbpath="d:/data/db" 
     - 如: C:\mongodb\bin\mongod --dbpath="d:/data/db" 
            
默認監聽埠是 MongoDB:27017  |  Mysql:3306  | Redis:6379
  
啟動MongoDB服務
- net start MongoDB

關閉MongoDB服務
- net stop MongoDB

移除 MongoDB 服務 (慎用)
- C:\mongodb\bin\mongod.exe --remove

#win10系統 添加環境變數            

可視化工具

nosqlbooster 推薦可以自行百度下載(免費)

簡單使用mongoDB

MongoDB 啟動
mongod 啟動MongoDB服務 默認埠 27017
	-- 默認資料庫檔案的存放地址 C:/data/db or /data/db
	-- dbpath="D:/data/db"
mongo 啟動客戶端 
	-- 默認連接 localhost:27017 
        
        
MongoDB 指令
	1. show databases 查看本地磁盤中的資料庫
    > show databases
    admin  0.000GB
    local  0.000GB
    
	2. use databasename 切換當前使用的資料庫
    > use admin
    switched to db admin
    # use 不存在的資料庫名 即 在記憶體中創建該資料庫  使用了不存在的物件 即 創建該物件
    
	3. db 查看當前使用的資料庫 
    > db
	admin
    
    4. db.表名 找到資料庫中的某張表
    # db.不存在的表名		即 在資料庫中創建該表(記憶體中)  使用了不存在的物件 即 創建該物件

	5. show tables 查看當前資料庫磁盤中的表
    > show tables
	system.version

資料操作

1.增 
	db.tablename.insert({})
	db.user.insert({name:"沙悟凈",age:66.666,hobby:[1,2,3,4,5]})
	db.user.insert([{},{}])
	
	官方推薦寫法 in 3.2:
	db.user.insertOne({}) 增加一條資料
	db.user.insertMany([{},{}])	批量增加資料
	
    db.tablename.insert({name:123}) 官方認可但不推薦
    res = db.tablename.insertOne({name:123}) # 增加一條資料 回傳值 inserted_id
    res = db.tablename.insertMany([{name:123},{name:456}]) # 增加多條資料 回傳值 inserted_ids

2.查詢
	db.tablename.find({查詢條件}) 查詢所有符合條件的資料
    
	db.user.find({name:"沙悟凈"}) 條件查詢
    # 并列條件查詢 and
	db.tablename.find({查詢條件1,查詢條件2})
	db.user.find({name:"沙悟凈",age:77}) 并列條件查詢
    
    db.tablename.find({查詢條件}) # 查詢所有符合條件的資料
    db.tablename.findOne({查詢條件}) # 查詢符合條件的第一條資料 回傳JSON資料
	
	$資料比較符
    # 用法 db.user.find({age:{$gt:70}})
	$lt		小于
	$lte	小于等于
	$gt		大于
	$gte	大于等于
	$eq		等于     # db.user.find({age:{$gt:70}})等同于  db.user.find({age:70}) (冒號不生效的的情況下可以使用$eq	)
	$ne		不等于
	

3.改
	db.tablename.update() 修改符合條件的第一條資料
	# 所有MongoDB的修改全部基于 修改器
	# $修改器 關鍵字
	
	# $關鍵字:
	db.user.updateOne({name:"鋼蛋","stdent.name":"MPy"},{$set:{"stdent.$.name":"Anyway"}})
	db.user.updateOne({name:"狗蛋",hobby:"喝酒"},{$set:{"hobby.$":"飆車"}})
	$是用來存盤符合當前Array條件元素的下標索引
	當前Array - ["抽煙","喝酒","上網"]
	條件元素  - {hobby:"喝酒"}
	當前Array - 第2個元素符合條件 它的下表索引是 1
	當前$ 的值就是 1
	
	如果使用".索引"的方式來操作Array  "欄位.索引位置"
	
	
	官方推薦
	db.user.updateOne({},{}) 修改符合條件的第一條資料
	db.user.updateMany({},{}) 修改符合條件的所有資料
	
	$set	
	db.user.update({age:66.666},{$set:{age:44}})
	強制的將某欄位值修改
	db.user.update({name:"孫大圣"},{$set:{ag18e:18}})
	如果該欄位不存在即創建該欄位并賦值
	
	$unset
	db.user.update({name:"孫大圣"},{$unset:{ag18e:1}})
	洗掉欄位
	
	$inc
	db.user.update({name:"孫大圣"},{$inc:{age:1}})
	參考增加 先參考原有資料 在原有資料基礎上增加
	db.user.update({name:"孫大圣"},{$inc:{age:-1}})
	減少
	
	
	針對 Array List操作
	$push == append
	db.user.update({name:"孫大圣"},{$push:{hobby:"8"}})
	在Array型別中增加資料在最末端增加
	
	$pushAll == extends
	db.user.update({name:"孫大圣"},{$pushAll:{hobby:[9,10,11,12]}})
	在Array型別中增加資料在最末端增加多條資料
	
	$pull == remove()
	db.user.update({name:"孫大圣"},{$pull:{hobby:"8"}})
	洗掉所有符合條件的資料
	
	$pullAll
	db.user.update({name:"孫大圣"},{$pushAll:{hobby:[9,10,11,12]}})
	遍歷洗掉所有符合條件的資料
	
	$pop  ~= pop() 洗掉Array中第一潭訓最后一條
	db.user.update({name:"孫大圣"},{$pop:{hobby:-1}})
	洗掉第一個資料
	
	db.user.update({name:"孫大圣"},{$pop:{hobby:1}})
	洗掉最后一個資料
	
    '''
    db.tablename.update({查詢條件},{$修改器:{修改值}}) # 官方認可但不推薦
    db.tablename.updateOne({查詢條件},{$修改器:{修改值}}) # 修改符合條件的第一條資料
    db.tablename.updateMany({查詢條件},{$修改器:{修改值}}) # 修改所有符合條件的資料

    $修改器 欄位:
    $set 	強制修改 創建欄位
    $unset 	洗掉欄位 {欄位:1}
    $inc 	參考增加 {$inc:{age:1/-1}} 只能增加不能減少

    $修改器 Array List
    $push 		== 		append  #追加資料 {$push:{hobby:6}}
    $pull 		== 		remove  #洗掉元素 {$pull:{hobby:6}}
    $pop  		~= 		pop		#洗掉第一個(1)或者最后一個元素(-1) {$pop:{hobby:1/-1}} 
    $pushAll 	== 		extends	#追加批量元素 {$pushAll:{hobby:[4,5,6,7]}}
    $pullAll	# 批量洗掉元素 {$pullAll:{hobby:[4,5,6,7]}}
	'''

4.洗掉
	db.tablename.remove({查詢條件}) 洗掉符合條件的所有資料
	db.user.remove({}) 如果條件為空則洗掉所有資料 危險!
	
	官方推薦的寫法:
	db.user.deleteOne({}) # 洗掉符合條件的第一條資料
	db.user.deleteMany({}) # 洗掉所有符合條件的資料 危險! 如果條件為空則洗掉所有資料

    db.tablename.remove({查詢條件}) #官方認可但不推薦
    db.tablename.deleteOne({查詢條件}) # 洗掉符合條件的第一條資料 _id
    db.tablename.deleteMany({查詢條件})# 洗掉所有符合條件的資料
    
    
5.選取 跳過 排序

排序
	db.user.find({}).sort({age:-1}) 倒序
	db.user.find({}).sort({age:1})	正序
跳過
	db.user.find({}).skip(跳過條目) 跳過
選取
	db.user.find({}).limit(300) 選取300條資料
	如果資料條目小于300 則全部查詢
	大于300 則只查詢300條

db.user.find({}).sort({age:-1}).skip(1).limit(2)
    當3個關鍵全部出現在一條陳述句中時,邏輯順序 先排序 - 再跳過 - 最后選取

分頁(每頁2條資料):
count = 2
page = 1
skip(page-1*count)
db.user.find({}).sort({age:-1}).skip(page-1*count).limit(count) 

1 2 0 1
2 2 2 1
3 2 4 1
4 2 6 1
5 2 8 1

資料型別

MongoDB 的資料型別
	ObjectID :Documents 自生成的 _id
	String: 字串,必須是utf-8
	Boolean:布林值,true 或者false (這里有坑哦~在我們大Python中 True False 首字母大寫)
	Integer:整數 (Int32 Int64 你們就知道有個Int就行了,一般我們用Int32)
	Double:浮點數 (沒有float型別,所有小數都是Double)
	Arrays:陣列或者串列,多個值存盤到一個鍵 (list哦,大Python中的List哦)
	Object:如果你學過Python的話,那么這個概念特別好理解,就是Python中的字典,這個資料型別就是字典
	Null:空資料型別 , 一個特殊的概念,None Null
	Timestamp:時間戳
	Date:存盤當前日期或時間unix時間格式 (我們一般不用這個Date型別,時間戳可以秒殺一切時間型別)
作 者:郭楷豐 出 處:https://www.cnblogs.com/guokaifeng/ 聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角 【推薦】一下,您的鼓勵是博主的最大動力! 自 勉:生活,需要追求;夢想,需要堅持;生命,需要珍惜;但人生的路上,更需要堅強,帶著感恩的心啟程,學會愛,愛父母,愛自己,愛朋友,愛他人,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/235687.html

標籤:其他

上一篇:【成功上岸】2年半開發經驗進入夢寐以求的京東上班,附上我的上岸經驗希望幫助到大家!

下一篇:GPFS--Centos7部署實戰

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more