本篇簡單介紹在MongoDB查詢資料時如何使用邏輯運算子(Logical Query Operators)來篩選查詢資料的語法。
本範例會使用到比較運算子(Comparison Query Operators),請參考MongoDB 查詢資料比較運算子語法範例。
在MongoDB建立資料請參考MongoDB 使用mongo shell新增多筆資料。
在members
集合建立一些資料如下:
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b3"), "name" : "王大明", "age" : 26 }
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b4"), "name" : "黃小玉", "age" : 19 }
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b5"), "name" : "李小芳", "age" : 23 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339b9"), "name" : "陳大樹", "age" : 29, "level" : 19 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339ba"), "name" : "林大為", "age" : 32, "level" : 22 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339bb"), "name" : "蔡小芬", "age" : 16, "level" : 25 }
查詢資料使用db.collection.find()
。collection
為要查詢的Collection名稱,本範例為members
。
AND
使用$and
返回同時滿足兩邊條件的查詢結果。
例如找出age > 20
且level > 20
的資料。
> db.members.find({ $and: [ { age: { $gt: 20 } }, { level: { $gt: 20 } } ] })
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339ba"), "name" : "林大為", "age" : 32, "level" : 22 }
效果類似SQL的SELECT * FROM members WHERE age > 20 AND level > 20;
OR
使用$or
返回滿足兩邊任一條件的查詢結果。
例如找出age < 20
且level > 20
的資料。
> db.members.find({ $or: [ { age: { $lt: 20 } }, { level: { $gt: 20 } } ] })
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b4"), "name" : "黃小玉", "age" : 19 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339ba"), "name" : "林大為", "age" : 32, "level" : 22 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339bb"), "name" : "蔡小芬", "age" : 16, "level" : 25 }
效果類似SQL的SELECT * FROM members WHERE age < 20 OR level > 20;
NOT
使用$not
返回不滿足條件的查詢結果。
例如找出age 不小於 30
的資料。
> db.members.find({ age: { $not: { $lt: 30 } } })
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339ba"), "name" : "林大為", "age" : 32, "level" : 22 }
NOR
使用$nor
返回不滿足兩邊任一條件的查詢結果。
例如找出不滿足age < 20
或level > 20
的資料。
> db.members.find({ $nor: [ { age: { $lt: 20 } }, { level: { $gt: 20 } } ] })
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b3"), "name" : "王大明", "age" : 26 }
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b5"), "name" : "李小芳", "age" : 23 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339b9"), "name" : "陳大樹", "age" : 29, "level" : 19 }
綜合
使用$or
及$and
找出(age < 20
且level > 20
)或(age > 30
且level > 20
)的資料。
> db.members.find( { $or: [
{ $and: [ { age: { $lt: 20 } }, { level: { $gt: 20 } } ] },
{ $and: [ { age: { $gt: 30 } }, { level: { $gt: 20 } } ] }
] } )
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339ba"), "name" : "林大為", "age" : 32, "level" : 22 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339bb"), "name" : "蔡小芬", "age" : 16, "level" : 25 }
參考:
沒有留言:
張貼留言