tft每日頭條

 > 科技

 > mongodb 數據分析

mongodb 數據分析

科技 更新时间:2024-08-13 09:13:01

在MongoDB中有兩種方式查詢數據庫裡的數據,即CURD查詢和聚合管道查詢。本章将對CURD查詢進行詳細講解。

準備數據

db.inventory.insertMany([ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" }, { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" }, { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" }, { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" }, { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" } ]);

查詢全部的inventory數據

db.inventory.find( {} ) //相當于select* from inventory

查詢item是paper的數據

db.inventory.find( { status: "D" } ) //條件就是在find中使用{ <field1>: <value1>, ... }進行匹配

結果:

mongodb 數據分析(系統學習MongoDB四史上最全MongoDB查詢API講解)1

多個條件and

db.inventory.find( { status: "A", qty: { $lt: 30 } } )//多個條件and即同時制定多個field //上行語句中的$lt為操作符,意思是小于 整個條件的查詢為查詢 //select * from inventory where status =“A”and qty<30

多個條件or

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } ) //使用$or操作符

既有and又有or的條件時

db.inventory.find( { status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] } ) //mongo條過濾時支持正則 使用/ ^p/指item滿足以p開頭的 像sql中的like =“q%”

上邊是邏輯操作符的使用,接下來展示比較運算符的使用。

//等于$eq { field: <value> } //默認為等于 也可以寫成 { <field>: { $eq: <value> } } //不等于$ne db.inventory.find( { status: {$ne :"D" } }) //大于$gt 大于等于$gte 小于$lt 小于等于$lte 不等于 $ne db.inventory.find( { qty: {$gt :12} } ) //查出qty大于12的文檔 //$in 同sql中的in意為滿足值在條件中的任意一個 $nin 意為not in db.inventory.find( { status: {$in :["D","A"] } }) //查詢狀态是D 或者A的

除了關系數據庫有的邏輯運算符和比較運算符之外,mongo還有很多獨有的能力。Mongo可以查詢存在某個字段的或者不存在某個字段的文檔如下:

//插入一條數據 db.inventory.insertOne([ { item: "journal2", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A",from:"Chinese"} ]); //查詢文檔中含有from字段的文檔 我們使用$exists操作符就可以做到 db.inventory.find({ from{$exists: true }}) //這得益于Mongo的松散結構,我們的文檔不需要每個字段都一緻。

當我們使用嵌套的文檔格式時,還需要學習下面的查詢操作

//還是我們剛才準備的數據,查詢size 的寬是21 高是14的文檔 db.inventory.find( { "size.h": 14 },{ "size.w": 21 } ) //字段為對象類型時條件字段我們可以使用.來連接子屬性

我們的文檔還可以存儲數組類型的數據,數組類型的查詢我們接着看:

//我們再插入幾條數據 db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] }, { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] }, { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] }, { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] }, { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] } ]); //查詢tags中包含red的文檔 db.inventory.find( { tags: "red" } ) ///查詢tags同時含有 red和blank的文檔 db.inventory.find( { tags: { $all: ["red", "blank"] } } ) //查詢數組中包含的元素任意一個大于15且任意一個小于20的文檔滿足條件的可以不是同一個 db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } ) //查詢數組中元素至少一個元素大于22小于30兩個條件都滿足 db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )// $elemMatch過濾每個元素 //查詢數組中指定元素滿足條件的文檔 db.inventory.find( { "dim_cm.0": { $gt: 25 } } ) //查詢數組中第一個元素滿足條件的 //查詢數組的元素個數滿足條件的文檔 db.inventory.find( { "dim_cm": { $size: 25 } } )

下圖為執行結果:

mongodb 數據分析(系統學習MongoDB四史上最全MongoDB查詢API講解)2

查詢結果

mongodb 數據分析(系統學習MongoDB四史上最全MongoDB查詢API講解)3

上圖結果對比一下可以清晰理解$elemMatch和普通寫法的區别。

當數組中的元素是對象時我們可以參考下面的查詢操作:

//準備數據 db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] }, { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] }, { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] }, { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] }, { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] } ]); //查詢數組對象中屬性滿足條件的文檔 db.inventory.find( { 'instock.qty': { $lte: 20 } } ) //查詢數組中指定元素的屬性滿足條件的文檔 db.inventory.find( { 'instock.0.qty': { $lte: 20 } } ) //數組中隻要一個元素滿足條件的文檔 db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } ) //使用$elemMatch查詢數組中任意一個元素都滿足$elemMatch的條件 db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )

注意:db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )這個查詢中嵌套文檔的字段順序也要和條件相同才會查出來,這正好和上一張講的BSON文檔的字段是有序的對應了起來。

下章整理result的操作符和update API的講解。。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved