在之前「Day05: MongoDB 的 CRUD(3) - Find & Update」這篇文章中曾使用到 比較查詢運算子
$gt
來做進階的資料查詢,接下來三篇將會介紹在 MongoDB 中使用的運算子:比較查詢運算子、邏輯查詢運算子、元素查詢運算子及 Array 查詢運算子。
對資料進行簡單的查詢操作時,我們只會使用 method 加上 filters 進行查詢,例如要查詢「年齡是20歲」的人,只需要使用 db.collection.find( {age: 20} )
。但若要查詢「年齡超過20歲」的人,則需要使用較複雜的 filters:db.collection.find( {age: {$gt: 20}} )
,比起第一個查詢,多了 $gt
這個 operator 運算子。
如我們之前使用過的 $gt
,比較運算子是用來比較值的大小,有以下幾種比較運算子:
$eq
:等於
db.inventory.find( {tags : {$eq : ['A', 'B']}} )
db.inventory.find( {tags : ['A', 'B']} )
$gt
:大於$gte
:大於等於$in
:包含其中任意一個
db.inventory.find( {price : {$in : [5, 15]}} )
:價格為5或15的庫存$lt
:小於$lte
:小於等於$ne
:不等於
db.inventory.find( {price : {$ne : 20}} )
:價格不是20的庫存$nin
:不包含其中任意一個
db.inventory.find( {price : {$nin : [5, 15]}} )
:價格不是5也不是15的庫存我們直接來用以下範例來介紹這些比較查詢運算子:
[
{
"title": "Avatar",
"year": 2009,
"director_name": "James Cameron",
"actors": [
"CCH Pounder",
"Joel David Moore"
],
"duration": 178,
"country": "USA",
"content_rating": "PG-13",
"gross": 760505847,
"imdb_score": 7.9
},
...
{
"title": "The Hobbit: An Unexpected Journey",
"year": 2012,
"director_name": "Peter Jackson",
"actors": [
"Aidan Turner",
"Adam Brown"
],
"duration": 182,
"country": "USA",
"content_rating": "PG-13",
"gross": 303001229,
"imdb_score": 7.9
}
]
導入範例資料:mongoimport /Users/andylin/Documents/resource/courses/mongodb/movie.json -d demo -c movie --jsonArray --drop
用 findOne() 檢視
db.movie.find({imdb_score: {$gt: 8}})
db.movie.find({imdb_score: {$lt: 7}})
db.movie.find({imdb_score: {$eq: 7}}).count()
db.movie.find({imdb_score: 7}).count()
db.movie.find({actors: {$in: ["Johnny Depp"]}}).pretty()
db.movie.find({actors: {$nin: ["Johnny Depp"]}}).pretty()
邏輯查詢運算子是用來做一些邏輯判斷,有以下幾種邏輯查詢運算子:
$and
:邏輯和
db.inventory.find( {$and: [{price: {$ne: 1.99}} , {price: {$exists: true}}]} )
$not
:邏輯非
db.inventory.find( {price {$not {$gt: 1.99}}} )
$nor
:邏輯或的反義
db.inventory.find( {$nor: [{price: 1.99}, {sale: true}]} )
$or
:邏輯或
db.inventory.find( {$or: [{quantity: {$lt: 20}}, {price: 10}]} )
db.movie.find({$and: [{imdb_score: {$gt: 7}} , {imdb_score: {$lt: 8}}]})
方法1:db.movie.find({imdb_score: {$gt: 7}}).count()
方法2:db.movie.find({imdb_score: {$not: {$lte: 7}}}).count()
db.movie.find({$or: [{imdb_score: {$lt: 7}} , {imdb_score: {$gt: 8}}]})
練習四:查詢 imdb_score 大於等於 7 且小於等於 8 的電影
今天介紹了比較查詢運算子及邏輯查詢運算子,可以用來做進階的過濾查詢,下一篇會接著介紹元素查詢運算子。