1. 程式人生 > 其它 >DAY 148 mongodb 查詢條件

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"]})
>db.mediaCollection.insert({"Type":"DVD",Title:"Blade Runner",Released:1982}) >db.mediaCollection.insert({"Type":"DVD",Title:"Toy Story 3",Released:2010})

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"),
"Type":"DVD", "Title":"Toy Story 3", "Released":2010 } ]

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" } ] } ]