pymongo基礎:進階

簡單查詢操做符(非聚合操做)

    比較(Comparsion)操做相關

(1)$eq : 用來等值條件過濾某一個key的值。

用法示例(過濾某個key等於某個值,能夠用 $eq)
db.op_test.find({"name":{$eq:"steven"}})

(2)$gt : 用來判斷某個key值大於某個指定的值。

用法示例(過濾某個key值,大於某個指定的值)
db.op_test.find({"age":{$gt:19}})

(3)$gt : 用來判斷某個key值大於等於某個指定的值。

用法示例(過濾某個key值,大於某個指定的值)
db.op_test.find({"age":{$gte:19}})

(4)$lt : 用來判斷某個key值小於某個指定的值。

用法示例(過濾某個key值,小於某個指定的值)
db.op_test.find({"age":{$lt:20}})

(5)$lte : 用來判斷某個key值小於等於某個指定的值。

用法示例(過濾某個key值,小於等於某個指定的值)
db.op_test.find({"age":{$lte:20}})

(6)$ne : 用來不等值條件過濾某一個key的值。

用法示例(過濾某個key不等於某個值,能夠用 $ne)
db.op_test.find({"name":{$ne:"steven"}})

(7)$in : 用來指定某個key的值在指定的離散的值域內

用法示例(過濾某個key的值是否符合條件,和$or的區別就是,or能夠組合不一樣key的不一樣條件,而$in則只的是單一條件)
db.op_test.find({"name":{$in:["steven","jack"]}})

(8)$nin : 和$in相對,用來指定key值不存在某個指定的離散值域內。

用法示例(和$in的用法相反)
db.op_test.find({"name":{$nin:["steven","jack"]}})

    邏輯(Logic)運算相關

(1) $or : 任意組合不一樣的查詢條件(能夠針對任意key的限制條件),只要知足任意組合條件中的一個便可。

用法示例(返回 name 爲 steven 或者 age 等於 20 的文檔):
db.op_test.find({"$or" : [{"name":"steven"},{"age":20}]})

(2) $and: 和$or操做符相對,任意組合不一樣的查詢條件(能夠針對任意key的限制條件),而且必須同時知足全部條件。

用法示例(返回 name 爲 steven 而且 age 等於 20 的文檔):
db.op_test.find({"$and" : [{"name":"steven"},{"age":20}]})

(3) $not: 元條件語句,須要和其餘條件語句組合使用。

用法示例($not 和 $lt 操做符組合使用,返回 age 大於等於20的文檔):
db.op_test.find({"age":{"$not":{"$lt":20}}})

(4) $nor:和$or相反,表示全部條件均不能知足則返回。

用法示例(凡是 name 爲 steven 或者 age 爲 20 的所有過濾掉):
db.op_test.find({"$nor" : [{"name":"steven"},{"age":20}]})

    元素(Element)運算相關

(1) $exists: 查詢不包含某一個屬性(key)的文檔。

用法實例(凡是包含name這個key的文檔所有返回)
db.op_test.find({"name":{"$exists":true}})

用法實例(凡是不包含name這個key的文檔所有返回)
db.op_test.find({"name":{"$exists":false}})

ps:true和false的區別就是判斷是否包含這個key

(2) $type : 過濾某個字段是某一個BSON數據類型的數據。

用法示例(返回全部name字段爲String類型的全部文檔)
db.op_test.find({"name":{"$type":2}})
ps:name後面的數字具體查詢列表參見:http://docs.mongodb.org/manual/reference/operator/query/type/#op._S_type

    求值(Evaluation)操做相關

(1) $mod : 取餘操做符,篩選通過區域操做後,結果符合條件的文檔。

用法示例(返回age的值和 4 求餘後 結果爲 0 的數據)
db.op_test.find({"age" : {"$mod" : [4,0]}})

(2) $regex : 篩選值知足正則表達式的文檔。

用法示例(返回 name 符合指定正則的數據,option選項限定正則的形式)
db.op_test.find({"name" : {$regex:"stev*",$options:"i"}})
ps:options相關參見:http://docs.mongodb.org/manual/reference/operator/query/regex/#op._S_regex

(3) $text: 針對創建了全文索引的字段,實施全文檢索匹配。

用法示例(針對構建全文索引的字段進行搜索,默認爲英文,不支持中文)
db.op_test.find({"$text":{$search:"steven",$language:"en"}})
ps:目前支持的語言以及縮寫,參見:http://docs.mongodb.org/manual/reference/text-search-languages/

(4) $where: 強大的查詢關鍵字,但性能較差,能夠傳入js表達式或js函數來篩選數據。

用法示例(返回知足傳入的js函數的文檔,函數表示文檔中只要任意字段的值爲"steven"則返回)
db.op_test.find({"$where":function(){
    for(var index in this) {
        if(this[index] == "steven") {
            return true;
        }
    }
    return false;
}})

    數組(Array)相關操做

$all : 數組查詢操做符,查詢條件是一個數組,被查詢的字段也是一個數組,要求被查詢的數組類型的字段要是查詢條件數組的超集(即大數組要包含小數組)。

用法示例:(查詢key value對應的數組值,要同時包含"a","b","c"三個元素)
db.op_test.find({"values":{$all:["a","b"]}})

$elemMatch : 數組查詢操做符,用來指定數組的每個元素同時知足所羅列的條件,若是不指定,則條件會是或的關係

用法示例:(要匹配 values數組中,至少有一個元素,知足全部的條件)
用於指定嵌套文檔操做,具體事例參見:http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/

$size: 用於某個數組類型的key對應值的數量知足要求。

用法示例:篩選出來包含數組元素個數爲3的文檔。
db.op_test.find({"values":{$size : 3}})

    評論(Comments)相關操做

$comment: 在查詢、更新或其餘操做執行過程當中,能夠經過添加$comment操做符添加評論。改評論會被記錄在日誌中,用於後續分析。

用法示例
db.collection.find( { <query>, $comment: <comment> } )

    地理位置(Geospatial)相關操做

$geoWithin: 這個操做符基於2d 空間索引,首先要針對文檔的某個字段創建一個2d的空間索引,而後利用此操做符,能夠在一個2d空間範圍內指定一個多變形,$geoWithin操做符就是查詢出包含在多變形範圍內的點。

詳見:http://docs.mongodb.org/manual/reference/operator/query/geoWithin/#op._S_geoWithin

$geoIntersects: 一樣基於2d空間索引,計算當前的空間範圍和指定的geo多變形取交集。

詳見:http://docs.mongodb.org/manual/reference/operator/query/geoIntersects/#op._S_geoIntersects

$near :基於2d空間索引,指定一個點,返回該點有近及遠的全部的點。

詳見:http://docs.mongodb.org/manual/reference/operator/query/near/#op._S_near

$nearSphere: 基於2d空間索引,指定一個點,由近及遠的返回全部的點,和$near操做符不一樣的是計算距離的方式 $nearSphere計算的是球面距離。$near計算的是座標距離。

    投影相關操做

$ : 對大家看錯,就只是一個$操做符,若是文檔中某個value是數組類型,經過 $ 操做符能夠指定數組字段的投影,返回數組字段中第一個匹配的那個元素,至關於截斷了原來的整個數組,只返回第一個值。

用法示例:(會返回values數組中,第一個和"a"相等的元素,也就是返回"a")
db.op_test.find({"values":{$eq:"a"}},{"values.$":1})
返回結果以下:
{ "_id" : ObjectId("551117417cbfa0a55db5c5b9"), "values" : [ "a" ] }

$elemMatch : 這個操做符上面數組操做有涉及,其另一個效果就是,在嵌套文檔的應用中,返回數組中第一個符合條件的文檔,能夠限定多種組合條件。

詳見:http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/#proj._S_elemMatch

$meta : 和全文索引 text index 組合使用,針對一個帶有全文索引的元素,指定改操做符,能夠返回和查詢條件類似的分數,分數越高,匹配度越高。

用法示例:
db.op_test.find({"$text":{$search:"steven",$language:"en"}},{score:{$meta:"textScore"}})
執行結果:
{ "_id" : ObjectId("550fdba3c118f1b20bd51a9f"), "name" : "steven", "age" : 20, "score" : 1.1 }

$slice : 數組類型字段的投影操做,返回原來數據的一個子集.針對一個數組,其有以下幾種返回子集的方式:

用法示例: 返回博客的前10條評論
db.blog.find({"comments":{"$slice":10}})

用法示例: 返回博客的後10條評論
db.blog.find({"comments":{"$slice":10}})

用法示例: 返回博客跳過前10條,而後返回第11 ~ 15條
db.blog.find({"comments":{"$slice":[10,5]}})正則表達式

相關文章
相關標籤/搜索