欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB創(chuàng)建和查詢視圖的方式

 更新時間:2023年12月26日 11:53:00   作者:威贊  
本文整理mongodb的官方文檔,介紹mongodb的視圖創(chuàng)建和查詢,在Mongodb中,允許使用兩種方式來創(chuàng)建視圖,本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧

本文整理mongodb的官方文檔,介紹mongodb的視圖創(chuàng)建和查詢。

Mongodb中,允許使用兩種方式來創(chuàng)建視圖。

//使用db.createCollection()來創(chuàng)建視圖
db.createCollection(
  "<viewName>",
  {
    "viewOn": "<source>",
    "pipeline": [<pipeline>],
    "collation": {<collation>}
  }
)
//使用db.createView()來創(chuàng)建視圖
db.createView(
  "<viewName>",
  "<source>",
  [<pipeline>],
  {
    "collation": { <collation>}
  }
)

限制和注意事項

  • 創(chuàng)建視圖時,要創(chuàng)建的視圖需要與依賴的集合在同一個數(shù)據(jù)庫。
  • 在普通視圖的定義的管道中中,不能出現(xiàn)$out和$merge過程。在$lookup或$facet過程中也不能出現(xiàn)$merge和$out。
  • 視圖創(chuàng)建后,不可以被重新命名,不可以修改視圖名稱。
  • 視圖中,不能夠使用mapReduce(), $text, $geoNear等命令。
  • Mongodb查看集合的操作,如db.getCollectionInfos()和db.getCollectionNames()命令,結(jié)果集中會包含用戶定義的視圖信息。
  • 視圖的定義對用戶是可見的,使用命令db.getCollectionInfos()或通過explain查詢執(zhí)行計劃時,打印出來的信息會包含視圖的定義信息。因此,用戶需要在定義視圖中避免直接引用敏感字段和字段值。
  • 使用AtlasUI,用戶只能創(chuàng)建物化視圖。
  • 使用find()命令查詢視圖中,不支持操作符$, $elemMatch, $slice, $meta
  • 使用db.collection.find()方法查詢視圖時,filter, projection, sort, skip, limit等查詢方法,轉(zhuǎn)化成等價的集合管道查詢方法。
  • Mongodb將客戶端視圖查詢條件與視圖定義中的管道操作一起進行查詢優(yōu)化
  • 查詢優(yōu)化器不會改變視圖的查詢結(jié)果,只是重新編排管道中查詢操作的順序來提高效率。
  • 使用db.createView()命令創(chuàng)建視圖的過程中,會在依賴的集合上加鎖。所有對該集合的操作需要等視圖創(chuàng)建結(jié)束后才能執(zhí)行。
  • 創(chuàng)建視圖的過程中,Mongodb會在system.view集合上加鎖,當創(chuàng)建視圖結(jié)束后,該鎖才會被釋放。

應用兩種方式創(chuàng)建視圖

構(gòu)建一個student集合,用于創(chuàng)建視圖

db.students.insertMany( [
    { sID: 22001, name: "Alex", year: 1, score: 4.0},
    { sID: 21001, name: "bernie", year: 2, score: 3.7},
    { sID: 20010, name: "Chris", year: 3, score: 2.5},
    { sID: 22021, name: "Drew", year: 1, score: 3.2},
    { sID: 17301, name: "harley", year: 6, score: 3.1},
    { sID: 21022, name: "Farmer", year: 1, score: 2.2},
    { sID: 20020, name: "george", year: 3, score: 2.8},
    { sID: 18020, name: "Harley", year: 5, score: 2.8}
])

使用db.createView()創(chuàng)建一個視圖,查詢出一年級學生的數(shù)據(jù)

db.createView(
    "V_firstYears", //視圖名稱
    "students",  //基于集合students創(chuàng)建視圖
    [{ $match: {year: 1}}] //集合查詢,匹配students表中一年級學生的數(shù)據(jù)
    )

查詢集合V_firstYears的數(shù)據(jù)

db.V_firstYears.find({},{_id: 0}) //使用{_id: 0}關(guān)閉返回結(jié)果中文檔id
/* 1 createdAt:12/25/2023, 4:01:19 PM*/
{
	"_id" : ObjectId("658936cfe0ac6d3d14d04bde"),
	"sID" : 22001,
	"name" : "Alex",
	"year" : 1,
	"score" : 4
},
/* 2 createdAt:12/25/2023, 4:01:19 PM*/
{
	"_id" : ObjectId("658936cfe0ac6d3d14d04be1"),
	"sID" : 22021,
	"name" : "Drew",
	"year" : 1,
	"score" : 3.2
},
/* 3 createdAt:12/25/2023, 4:01:19 PM*/
{
	"_id" : ObjectId("658936cfe0ac6d3d14d04be3"),
	"sID" : 21022,
	"name" : "Farmer",
	"year" : 1,
	"score" : 2.2
}

使用db.createCollection()方法創(chuàng)建一個查詢畢業(yè)生的視圖。

db.createCollection(
    "v_graduateStudents", 
    {
        viewOn: "students",
        pipeline: [ { $match: { $expr: { $gt: ["$year", 4]}}}],//查詢超過4年的數(shù)據(jù)
        collation: { locale: "en", caseFirst: "upper"} //添加字符序定義,指定排序方法
    }
)

查詢定義的畢業(yè)生視圖。查詢過程中,添加了按照學生姓名進行排序。定義視圖時指定了按照大寫字母優(yōu)先的排序規(guī)則,則Harey排在前面。

db.v_graduateStudents.find({},{_id: 0}).sort('name')
/* 1 */
{
	"sID" : 18020,
	"name" : "Harley",
	"year" : 5,
	"score" : 2.8
},
/* 2 */
{
	"sID" : 17301,
	"name" : "harley",
	"year" : 6,
	"score" : 3.1
}

刪除視圖,重新建立一個小寫字母優(yōu)先的字符序規(guī)則

db.v_graduateStudents.drop()
db.createCollection(
    "v_graduateStudents", 
    {
        viewOn: "students",
        pipeline: [ { $match: { $expr: { $gt: ["$year", 4]}}}],
        collation: { locale: "en", caseFirst: "lower"}
    }
)

查詢新建的視圖,返回結(jié)果與前面的排序結(jié)果不同。

db.v_graduateStudents.find({},{_id: 0}).sort('name')
/* 1 */
{
	"sID" : 17301,
	"name" : "harley",
	"year" : 6,
	"score" : 3.1
},
/* 2 */
{
	"sID" : 18020,
	"name" : "Harley",
	"year" : 5,
	"score" : 2.8
}

到此這篇關(guān)于MongoDB創(chuàng)建和查詢視圖的文章就介紹到這了,更多相關(guān)MongoDB查詢視圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • MongoDB數(shù)據(jù)庫基礎(chǔ)知識整理

    MongoDB數(shù)據(jù)庫基礎(chǔ)知識整理

    這篇文章介紹了MongoDB數(shù)據(jù)庫的基礎(chǔ)知識,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • yum源安裝mongodb圖文教程

    yum源安裝mongodb圖文教程

    本文給大家介紹的是使用yum源安裝MongoDB的詳細的圖文教程,小伙伴們跟著教程一步步操作即可,希望大家喜歡
    2018-09-09
  • mongodb使用docker搭建replicaSet集群與變更監(jiān)聽(最新推薦)

    mongodb使用docker搭建replicaSet集群與變更監(jiān)聽(最新推薦)

    replicaSet和cluster從部署難度相比,replicaSet要簡單許多。如果所存儲的數(shù)據(jù)量規(guī)模不算太大的情況下,那么使用replicaSet方式部署mongodb是一個不錯的選擇,這篇文章主要介紹了mongodb使用docker搭建replicaSet集群與變更監(jiān)聽,需要的朋友可以參考下
    2023-03-03
  • 解決mongo的tickets被耗盡導致卡頓問題

    解決mongo的tickets被耗盡導致卡頓問題

    這篇文章主要介紹了解決mongo的tickets被耗盡導致卡頓問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MongoDB通過查詢與游標徹底玩轉(zhuǎn)分布式文件存儲

    MongoDB通過查詢與游標徹底玩轉(zhuǎn)分布式文件存儲

    MongoDB最大的特點是它支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引,這篇文章主要介紹了MongoDB查詢與游標,徹底玩轉(zhuǎn)分布式文件存儲,需要的朋友可以參考下
    2023-01-01
  • MongoDB中哪幾種情況下的索引選擇策略

    MongoDB中哪幾種情況下的索引選擇策略

    這篇文章主要給大家介紹了關(guān)于MongoDB中哪幾種情況下的索引選擇策略的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • PHP庫 查詢Mongodb中的文檔ID的方法

    PHP庫 查詢Mongodb中的文檔ID的方法

    這篇文章主要介紹了PHP庫 查詢Mongodb中的文檔ID的方法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 在Linux服務(wù)器中配置mongodb環(huán)境的步驟

    在Linux服務(wù)器中配置mongodb環(huán)境的步驟

    這篇文章主要介紹了在Linux服務(wù)器中配置mongodb環(huán)境的步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Mongodb常用的身份驗證方式

    Mongodb常用的身份驗證方式

    對MongoDB部署啟用訪問控制會強制執(zhí)行用戶身份驗證,要求在登錄MongoDB系統(tǒng)用戶識別自己。 當訪問啟用了訪問控制的MongoDB部署時,用戶只能執(zhí)行由其角色確定的操作。
    2017-08-08
  • 最新評論