DAY 148 mongodb 查詢條件
mongodb條件操作符:"$lt", "$lte", "$gt", "$gte", "$ne"就是全部的比較操作符,對應於"<", "<=", ">", ">=","!="。
原子操作符:"$and“, "$or“,"$nor“。
or查詢有兩種方式:一種是用$in來查詢一個鍵的多個值,另一種是用$or來完成多個鍵值的任意給定值。$in相當於SQL語句的in操作。
$nin不屬於。
$not與正則表示式聯合使用時候極其有用,用來查詢哪些與特定模式不匹配的文件。
$slice相當於陣列函式的切片,檢索一個數組文件並獲取陣列的一部分。限制集合中大量元素節省頻寬。理論上可以通過limit() 和 skip() 函式來實現,但是,對於陣列就無能為力了。 $slice可以指定兩個引數。第一個引數表示要返回的元素總數。第二個引數是可選的。如果使用的話,第一個引數定義的是偏移量,而第二個引數是限定的個數。第二個引數還可以指定一個負數。
$mod取摸操作。
$size操作符允許對結果進行篩選,匹配指定的元素數的陣列。
$exists操作符允許返回一個特定的物件。注意:當前版本$exists是無法使用索引的,因此,使用它需要全表掃描。
$type操作符允許基於BSON型別來匹配結果。
1. 插入一些資料
1 2 3 4 5 |
>usettlsa_com
switchedtodbttlsa_com
>db.mediaCollection.insert({"Type":"DVD","Title":"Matrix, The","Released":1999,"Cast":["Keanu Reeves","Carry-Anne Moss","Laurence Fishburne","Hugo Weaving","Gloria Foster","Joe Pantoliano"]}) |
2.$gt (greater than)
1 2 3 4 5 6 7 8 9 |
>db.mediaCollection.find({Released:{$gt:2000}},{"Cast":0}).toArray()
[
{
"_id":ObjectId("53548254d85b463e729a2e59"), |
3.$gte(greater than or equal to)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >db.mediaCollection.find({Released:{$gte:1999}},{"Cast":0}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999 }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] |
4.$lt (less than)
1 2 3 4 5 6 7 8 9 | >db.mediaCollection.find({Released:{$lt:1999}},{"Cast":0}).toArray() [ { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 } ] |
5.$lte (less than orequal to)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >db.mediaCollection.find({Released:{$lte:1999}},{"Cast":0}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999 }, { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 } ] |
6. 組合使用
1 2 3 4 5 6 7 8 9 | >db.mediaCollection.find({Released:{$gte:1990,$lt:2010}},{"Cast":0}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999 } ] |
7.$ne (not equals)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | >db.mediaCollection.find({Type:"DVD"}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Keanu Reeves", "Carry-Anne Moss", "Laurence Fishburne", "Hugo Weaving", "Gloria Foster", "Joe Pantoliano" ] }, { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] >db.mediaCollection.find({Type:"DVD",Released:{$ne:1999}}).toArray() [ { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] |
8. $in/$or
1 2 3 4 5 6 7 8 9 | >db.mediaCollection.find({Released:{$in:[1999,2008,2009]}},{"Cast":0}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999 } ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >db.mediaCollection.find({$or:[{Released:1999},{Released:2008},{Released:2009}]}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Keanu Reeves", "Carry-Anne Moss", "Laurence Fishburne", "Hugo Weaving", "Gloria Foster", "Joe Pantoliano" ] } ] |
9.$nin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | >db.mediaCollection.find({Type:"DVD"},{"Cast":0}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999 }, { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] >db.mediaCollection.find({Released:{$nin:[1999,2008,2009]},Type:"DVD"},{"Cast":0}).toArray() [ { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] |
10.$all
與$in有點相似,只不過$all是所有屬性要與文件匹配。$in只匹配其一就行。
1 2 | >db.mediaCollection.find({Released:{$all:["2010","2009"]}},{"Cast":0}).toArray() [] |
11. 多個表示式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | >db.mediaCollection.find({$or:[{"Title":"Toy Story 3"},{"ISBN":"987-1-4302-3051-9"}]}).toArray() [ { "_id":ObjectId("5353462f93efef02c962da71"), "Type":"Book", "Title":"Definitive Guide to MongoDB, the", "ISBN":"987-1-4302-3051-9", "Publisher":"Apress", "Author":[ "Membrey, Peter", "Plugge, Eelco", "Hawkins, Tim" ] }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] |
1 2 3 4 5 6 7 8 9 | >db.mediaCollection.find({"Type":"DVD",$or:[{"Title":"Toy Story 3"},{"ISBN":"987-1-4302-3051-9"}]}).toArray() [ { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] |
11. 切片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | >db.mediaCollection.find({"Title":"Matrix, The"}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Keanu Reeves", "Carry-Anne Moss", "Laurence Fishburne", "Hugo Weaving", "Gloria Foster", "Joe Pantoliano" ] } ] >db.mediaCollection.find({"Title":"Matrix, The"},{"Cast":{$slice:3}}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Keanu Reeves", "Carry-Anne Moss", "Laurence Fishburne" ] } ] >db.mediaCollection.find({"Title":"Matrix, The"},{"Cast":{$slice:-3}}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Hugo Weaving", "Gloria Foster", "Joe Pantoliano" ] } ] >db.mediaCollection.find({"Title":"Matrix, The"},{"Cast":{$slice:[2,3]}}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Laurence Fishburne", "Hugo Weaving", "Gloria Foster" ] } ] >db.mediaCollection.find({"Title":"Matrix, The"},{"Cast":{$slice:[-5,4]}}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Carry-Anne Moss", "Laurence Fishburne", "Hugo Weaving", "Gloria Foster" ] } ] |
12. $mod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | >db.mediaCollection.find({Type:"DVD",Released:{$mod:[2,0]}}).toArray() [ { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] >db.mediaCollection.find({Type:"DVD",Released:{$mod:[2,1]}}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Keanu Reeves", "Carry-Anne Moss", "Laurence Fishburne", "Hugo Weaving", "Gloria Foster", "Joe Pantoliano" ] } ] |
13. $size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | >db.mediaCollection.find({Tracklist:{$size:2}}).toArray() [ { "_id":ObjectId("5353463193efef02c962da73"), "Type":"CD", "Artist":"Nirvana", "Title":"Nevermind", "Tracklist":[ { "Track":"1", "Title":"Smells like teen spirit", "Length":"5:02" }, { "Track":"2", "Title":"In Bloom", "Length":"4:15" } ] } ] >db.mediaCollection.find({Cast:{$size:1}}).toArray() [] >db.mediaCollection.find({Cast:{$size:6}}).toArray() [ { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Keanu Reeves", "Carry-Anne Moss", "Laurence Fishburne", "Hugo Weaving", "Gloria Foster", "Joe Pantoliano" ] } ] |
14.$exists
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | >db.mediaCollection.find({Author:{$exists:true}}).toArray() [ { "_id":ObjectId("5353462f93efef02c962da71"), "Type":"Book", "Title":"Definitive Guide to MongoDB, the", "ISBN":"987-1-4302-3051-9", "Publisher":"Apress", "Author":[ "Membrey, Peter", "Plugge, Eelco", "Hawkins, Tim" ] } ] >db.mediaCollection.find({Author:{$exists:false}}).toArray() [ { "_id":ObjectId("5353462f93efef02c962da72"), "Type":"CD", "Artist":"Nirvana", "Title":"Nevermind" }, { "_id":ObjectId("5353463193efef02c962da73"), "Type":"CD", "Artist":"Nirvana", "Title":"Nevermind", "Tracklist":[ { "Track":"1", "Title":"Smells like teen spirit", "Length":"5:02" }, { "Track":"2", "Title":"In Bloom", "Length":"4:15" } ] }, { "_id":ObjectId("53548225d85b463e729a2e57"), "Type":"DVD", "Title":"Matrix, The", "Released":1999, "Cast":[ "Keanu Reeves", "Carry-Anne Moss", "Laurence Fishburne", "Hugo Weaving", "Gloria Foster", "Joe Pantoliano" ] }, { "_id":ObjectId("5354823fd85b463e729a2e58"), "Type":"DVD", "Title":"Blade Runner", "Released":1982 }, { "_id":ObjectId("53548254d85b463e729a2e59"), "Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ] |
15. $type
根據BSON型別來檢索集合中匹配的結果。
MongoDB中可以使用的型別如下表所示:
型別描述 | 型別值 |
---|---|
Double | 1 |
String | 2 |
Object | 3 |
Array | 4 |
Binary data | 5 |
Object id | 7 |
Boolean | 8 |
Date | 9 |
Null | 10 |
Regular expression | 11 |
JavaScript code | 13 |
Symbol | 14 |
JavaScript code with scope | 15 |
32-bit integer | 16 |
Timestamp | 17 |
64-bit integer | 18 |
Min key | 255 |
Max key | 127 |
下面這個例項是查詢嵌入物件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | >db.mediaCollection.find({Tracklist:{$type:3}}).toArray() [ { "_id":ObjectId("5353463193efef02c962da73"), "Type":"CD", "Artist":"Nirvana", "Title":"Nevermind", "Tracklist":[ { "Track":"1", "Title":"Smells like teen spirit", "Length":"5:02" }, { "Track":"2", "Title":"In Bloom", "Length":"4:15" } ] } ] |