把 MongoDB 的查詢放在最後面,其實你也已經學完了,但我還是快速帶過基本的範例。
field == TargetString
的文件db.collection.find({"field": "TargetString"})
field == str1 OR field == str2
的文件db.collection.find({"field": { $in: ["str1", "str2"] }})
5 <= field < 8
的文件db.collection.find({"field": { $gte: 5, $lt: 8 }})
field < 5 OR field >= 7
的文件db.collection.find({ $or:[{ "field": {$lt:5}}, {"field": {$gte:7}} ]})}})
還是要來一下 MongoDB Find Pattern
db.collection.find(query, projection)
上面的範例都還是 query 的範疇,也代表 projection 是可以省略的。
Projection 本身就像是要查詢的欄位一樣:
1
代表 true,查詢0
代表 false,呼略此欄位因此想查出 field_a
,但不要 field_b
就像這樣:
db.collection.find({}, { field_a:1, field_b:0 })
再提醒的是 _id
預設就是會被查詢出來,如果也不想要的話,需要特別指定該欄位為 0
Embedded document 查詢其實也非常的簡單,一個 .
就能講完。
首先我們準備一個範例:
db.movie.insertMany([
{
name: 'movie1',
publishYear: 2020,
producer: {
company: "Disnai",
registrant: "Water Disnai"
}
},
{
name: 'movie2',
publishYear: 2019,
producer: {
company: "Larvem",
registrant: "Natt Marvel"
}
}
])
假設我們要查公司是 Disnai 的電影只需要使用 .
連接 nested document 欄位即可。
db.movie.find({ 'producer.company': 'Disnai' })
這邊跟之前的 collection 略微不同,需要使用單引號''
或雙引號""
將整個欄位包住。
方法還是一樣。
db.movie.find({ 'level1.level2.level3': 'Gotcha' })
實際的使用情境上,我們很常會需要確認某個欄位是否存在,這時候要如何下查詢語法?
要使用的 operator 是 $exists
,直接上範例!
db.movie.find({ NotExistField: { $exists: true }})
這個範例就是查詢存在這個欄NotExistField
的文件,結果當然是沒有任何文件有此欄位。若 exists 設定為 false,那每一筆資料都符合、會被查出來了喔。
Null 是 Bson 支援的型態之一,不是沒有此欄位,是此欄位是 null。那麼我們要如何查詢 null
欄位呢?
首先先來準備三筆資料
db.testNull.insertMany([
{'field': 1},
{'field': 2},
{'field': null},
])
查詢語法比想像中簡單,就是 field:null
film> db.testNull.find({ field:null })
[ { _id: ObjectId("6136337d924cfb987f3ce27c"), field: null } ]
film>
打鐵趁熱,我們也趕緊看看如何判斷欄位的類型,某些情況會有不確定性,就需要單獨查詢這個欄位是什麼類型。
使用的 operator 為 $type
。
film> db.testNull.find({ field : { $type: 10 } })
[ { _id: ObjectId("6136337d924cfb987f3ce27c"), field: null } ]
為什麼是 10
呢?這就要回到剛開始介紹的 BSON type 類型,這邊直接提供官網 供各位參考,其中 Number
欄位就是這裡的數字。
MongoDB 比較基礎的部分在前幾天總算結束了,後面的內容會稍微深入且份量比較重喔~
本系列文章會同步發表於我個人的部落格 Pie Note