源碼時代java課堂:Mongodb進階之Mongodb使用

2020-11-10 源碼時代

1. MongoDB數據的使用

2.1 mongodb中的概念

Mongodb因為是最像關係型資料庫的非關係型資料庫,所以我們可以對照著mysql來認識Mongodb中的一些概念。

2.2 mongodb常用語法

1、顯示庫列表:show dbs

2、使用庫:use dbname

注意:

1、該命令可隱式創建資料庫,即如果資料庫不存在則創建資料庫,否則切換到指定的資料庫。

2、如果show dbs沒有出現新創建的資料庫,則往裡面存入一條數據。如:

db.mydb.insert({name:"tom",age:18,gender:1,address:"北京",isDelete:0})

  1. 顯示集合列表 show collections
  2. 創建表 db.createCollection(name, options)

Name :集合名稱

Optinons:指定配置,如內存大小等

  1. 查詢集合 db.collectionName.find()
  2. 條件查詢 db.tablename.find({「age」:18})
  3. 排序 db.COLLECTION_NAME.find().sort({KEY:1})

注意:使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用於降序排列。

  1. 分頁 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

Limit() 是要讀取幾條 相當於pageSize

Skip()是要跳過幾條 (currentpage-1)*pageSize

SELECT * FROM emp limit (currentpage-1)*pageSize,pageSize

  1. 模糊查詢

db.collectionName.find({fieldName: /A/})

類似於sql:SELECT * FROM UserInfo WHERE userName LIKE "%A%"

db.collectionName.find({fieldName: /^A/})

類似於sql:SELECT * FROM UserInfo WHERE userName LIKE "A%"

還可以利用正則表達式進行模糊查詢:

db.collectionName.find({fieldName:{$regex:"runoob"}})

等價於

db.collectionName.find({fieldName:/runoob/})

  1. 插入文檔 db.collectionName.insert({name:」tom」,age:18})

注意:該命令可隱式創建表,即如果沒有該表則新建後插入該數據,如果該表存在,則往表裡插入該數據。

  1. 修改文檔 db.collection.update({query},{update})

實例: db.collectionName.update({「_id」:1},{$set:{「stuName」:」李四」}})

注意:

①query : update的查詢條件,類似sql update查詢內where後面的。

②update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的

③upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。

④multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。

12、刪除文檔 db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>})

注意:

①query :(可選)刪除的文檔的條件。

②justOne : (可選)如果設為 true 或 1,則只刪除一個文檔,如果不設置該參數,或使用默認值 false,則刪除所有匹配條件的文檔。

③writeConcern :(可選)拋出異常的級別。

2.3 mongodb高級查詢

2.3.1 條件查詢

1 >($gt) <($lt) >=($gte) <=($lte) 操作符

db.collectionName.find({field : {$gt : 100}}

db.t_user.find({「age」: {$lt : 18}}

等價於sql的

Select * from tablename where columnname > 100

2 使用 (<) 和 (>) 查詢 - $lt 和 $gt

db.collectionName.find({field : {$lt :200, $gt : 100}})

db.t_user.find({「age」: {$lt : 18,$gt:20}}

等價於sql的

Select * from tableName where columnName < 200 and colunmName > 100

2.3.2 聚合

聚合(aggregate)主要用於處理數據(諸如統計平均值,求和等),並返回計算後的數據結果。有點類似sql語句中的分組方法 group by

1 基本語法

db.collectionName.aggregate(AGGREGATE_OPERATION)

2 實例

db.collectionName.aggregate([{$group:{_id:"$field",」別名」:{$sum:1}}}])

Db.t_user.aggregate([{$group:{「sex」:"$field",num_tutorial:{$sum:1}}}])

等價於sql的

Select columnName,count(*) a count1 from tableName where age > 18 grop by columnName

3 聚合中常用的幾個操作

4 管道

聚合管道將MongoDB文檔在一個管道處理完畢後將結果傳遞給下一個管道處理。管道操作是可以重複的。

db.collectionName.aggregate( [

{ $match : { 「age」: { $gt : 18 } } },

{ $group: { _id: 「sex」, count: { $sum: 1 } } }

] );

$match用於獲取欄位中大於70小於或等於90記錄,然後將符合條件的記錄送到下一階段$group管道操作符進行處理。

類似於sql中的

Select column2,count(*) from tableName where age>18 group by column2

更多的語法可以參考: https://www.runoob.com/mongodb/mongodb-tutorial.html

2.4 索引

2.4.1 普通索引

索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件並選取那些符合查詢條件的記錄。這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可以要花費幾十秒甚至幾分鐘,這對網站的性能是非常致命的。索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對資料庫表中一列或多列的值進行排序的一種結構

1 單欄位索引

db.collectionName.createIndex({field:options})

db.t_user.createIndex({age:1})

Field 是要創建索引的欄位 options =1是升序創建,-1是倒序創建

2 多欄位索引

db.collectionName.createIndex({"field1":1,"field2":-1})

2.4.2 高級索引

1 索引數組欄位

db.collectionName.ensureIndex({"arrField":1})

arrField 是數組欄位

2 索引子文檔欄位

db.collectionName.ensureIndex({"fieldObj.field1":1,"fieldObj.field2":1,"fieldObj.field3":1})

fieldObj是mongodb中的對象欄位,field1,field2,field3是fieldObj中的子欄位

ensureIndex() = createIndex()

3.0版本前都用ensureIndex(),3.0之後就用的createIndex()

如何查看我的查詢欄位中是包含索引的?explain()

db.collectionName.find({field:"value"}).explain()


相關焦點

  • 源碼時代java課堂:Mongodb進階之Mongodb使用
    MongoDB數據的使用2.1 mongodb中的概念Mongodb因為是最像關係型資料庫的非關係型資料庫,所以我們可以對照著mysql來認識Mongodb中的一些概念。2.2 mongodb常用語法1、顯示庫列表:show dbs2、使用庫:use dbname注意:1、該命令可隱式創建資料庫,即如果資料庫不存在則創建資料庫,否則切換到指定的資料庫。2、如果show dbs沒有出現新創建的資料庫,則往裡面存入一條數據。
  • Mongodb快速入門之使用Java操作Mongodb
    【IT168 專稿】在上一篇文章中,我們學習了Mongodb的安裝和初步使用,在本文中,將學習如何使用Java去編程實現對Mongodb的操作。  HelloWorld程序  學習任何程序的第一步,都是編寫HelloWorld程序,我們也不例外,看下如何通過Java編寫一個HelloWorld的程序。
  • Java Tutorial:Java操作MongoDB入門
    這是使用MongoDB java驅動的簡單說明。  For more information about the Java API, please refer to the online API Documentation for Java Driver  想獲取更多關於java的API,請查看在線API文檔。
  • 淺談如何用Java操作MongoDB?
    本文主要講述如何使用Java操作MongoDB以及了解MongoDB如何進行日常的資料庫操作。文章內容如下:使用下面的命令幫你查看可用的資料庫,它會顯示「company」尚未被創建。show dbs;    第五步:在MongoDB中保存數據使用下面的命令來保存employee 數據代表一個collection,將其命名為employees。
  • SpringBoot 配置 MongoDB 多數據源
    for basic#----------------------------------------------basic.spring.data.mongodb.host=localhostbasic.spring.data.mongodb.port=27016basic.spring.data.mongodb.username=auto_computebasic.spring.data.mongodb.password
  • Nutch-MongoDB-ElasticSearch搭建搜尋引擎
    一、實現目標 使用Nutch、MongoDB、ElasticSearch實現一個簡單搜尋引擎,使用Nutch爬蟲抓取網頁,存儲到MongoDB中,通過mongodb-connector同步到ElasticSearch中,建立索引,通過RestFul API從ElasticSearch中檢索內容。
  • Spring Boot——MongoDB的應用
    繼續 在src / main / java / com / stackify / mongodb / config 包中創建以下MongoConfig類 :package com.stackify.mongodb.config;import com.mongodb.MongoClient;import cz.jirutka.spring.embedmongo.EmbeddedMongoFactoryBean
  • SpringBoot怎麼整合MongoDB?
    =localhost#用戶名密碼不同的庫需要不同的認證,這裡是在 admin 庫中spring.data.mongodb.authentication-database=admin#有帳戶和密碼就寫,沒有就空著spring.data.mongodb.username=spring.data.mongodb.password=spring.data.mongodb.port=27017
  • 不要隨意使用mongoDB
    因為這些優勢,mongodb迅速崛起,不斷蠶食關係資料庫從上個世紀就開始積累的市場份額。,既可以寫入用戶數據,也可以寫入訂單數據,mongodb本身不做任何限制,一切約束全靠程式設計師自身。然而關係資料庫太過於死板,只能存儲二維的表數據結構,雖然現代的關係資料庫對json和xml做了很好的支持,但是並沒有被廣泛使用,大多數時候只是使用基本的表功能。要兼顧靈活性和健壯性兩種優點,那麼我們只能引入外部模式。有兩種結構化數據協議很流行,一種是google開發的protobuf協議,一種是facebook開發的apache thrift協議。
  • Java編程第52講——如何用MongoDB處理非結構化數據
    我們可以把MongoDB當成普通的關係型資料庫來使用,就像使用MySQL一樣,插入到MongoDB中的每一條數據都有固定的欄位數,每個欄位都有固定的類型,我們通過數據實體表示每條數據。但如果這樣,MongoDB適應資料庫結構變化的優勢就不能發揮出來了,這顯然不是我們使用MongoDB的目標。
  • mongodb存儲圖片和文件實踐
    可能很多人會問為何要用mongodb存儲圖片和文件,我的理由是mongodb作存儲方便穩定易擴展,我們自己寫的文件存儲伺服器肯定很LOW,除了含有巨量圖片的大型系統,一般由公司自研圖片存儲外,大部分情況下,我們用mongodb足以應付。另外,很多人根本就不知道或者沒嘗試過用mongodb存儲文件,而對方還故意問我為什麼用這個。
  • 用MongoDB和Spring Data創建Java應用
    【IT168 專稿】當前,NOSQL時代其實已經來臨,在NOSQL的大家族中,MongoDB以其可擴展性強,性能高以及開源佔據了重要的地位。在MongoDB中,存儲數據的方式不再是關係型資料庫,而是以象JSON格式那樣進行存儲,所以可以稱為文檔型的NOSQL。
  • Reactive-MongoDB異步Java Driver解讀
    但實質上,使用同步驅動(Java Sync Driver)的項目也不在少數,或許是因為先入為主的原因(同步Driver的文檔說明更加的完善),又或者是為了兼容舊的 MongoDB 版本。無論如何,由於 Reactive 的發展,未來使用異步驅動應該是一個趨勢。在使用 Async Driver 之前,需要對 Reactive 的概念有一些熟悉。
  • 如何在Fedora上安裝MongoDB伺服器
    是的,還有替代方案,例如 PostgreSQL 在最新版本中也支持 JSON,它可以在無法再使用 MongoDB 的情況下使用它。使用 JSONB 類型,索引在 PostgreSQL 中可以很好地工作,其性能可與 MongoDB 媲美,甚至不會受到 ACID 的影響。開發人員可能選擇 MongoDB 的技術原因並未隨許可證而改變,因此許多人仍想使用它。
  • mongodb可視化工具如何使用_介紹一款好用 mongodb 可視化工具
    打開APP mongodb可視化工具如何使用_介紹一款好用 mongodb 可視化工具 發表於 2018-02-07 09:31:48
  • Mongodb資料庫入門之Spring Mongodb
    【IT168 技術】在上一篇教程中,我們學習了如何使用Mongodb 的JAVA API對Mongodb進行相關的資料庫操作,在本文中,將學習使用Spring for Mongodb去簡化對Mongodb的操作。
  • mongodb安裝部署
    mongodb 文檔型資料庫以json格式存儲數據mongodb與RDBMS最的區別在於:沒有固定的行列組織數據結構mongodb數據存儲格式:BSON二進位的JSON,JSON文檔的二進位編碼存儲格式BSON有JSON沒有的Date和BinDatamongodb中的document以及BSON形式存放
  • Mongodb的安裝
    創建mongodb服務命令前提:現在安裝目錄下data目錄,用於後期存數據創建服務:bin/mongodbexe——install ——dbpath 磁碟路徑 ——logpatg 日誌路徑刪除服務:bin/mongod.exe ——remove啟動服務:net start mongodb關閉服務:net
  • MongoDB C++ 起步
    最近準備把空閒時間都發在mongodb的研究上,因此將有一系列的文章記錄這個過程。直接從官網下載了1.2.1的windows32版本:http://downloads.mongodb.org/win32/mongodb-win32-i386-1.2.1.zip解壓之後寫了個runserver.bat文件: E:\lenkydatasource\mongodb\1.2.1\
  • 數據實時同步之MongoDB
    MongoDB是當前很多企業使用的,當日積月累數據很大時,就可能會忽略歷史數據的價值,可以把數據實時同步到其他儲存:HBASE、HIVE、HDFS文件等等。在當前大數據、雲計算的時代潮流下,實現數據價值,對企業決策力、洞察發現力極其有益。在MongoDB 3.6 之後版本,提供Change Streams API。但目前數據量龐大的仍還是3.6之前版本的歷史悠久企業。