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

MongoDB(NoSQL) 非關系型資料庫

2020-09-14 18:54:42 資料庫

[TOC]

簡單了解 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/shujuku/37916.html

標籤:NoSQL

上一篇:長時間查詢占用元資料鎖導致gh-ost變更失敗

下一篇:redis系列之------簡單的動態字串(SDS)

標籤雲
其他(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)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more