天天看點

《MongoDB管理與開發精要》——3.1節查詢操作符

3.1 查詢操作符

操作符就是對資料進行操作的符号,其表達了要對資料執行的操作。資料庫系統的每一條查詢指令都有一個操作符,表示該指令應該執行什麼性質的操作。

條件操作符

最常用也是最簡單的操作符<、<=、>、>=如下面的代碼所示:

$all比對所有

此操作符跟sql文法的in類似,不同的是in隻需要比對括号内的某一個值,而$all必須滿足括号内的所有值,如下面的代碼所示:

$exists判斷字段是否存在

此操作符用于判斷某個字段是否存在,例如查詢所有存在age字段的記錄,如下面的代碼所示:

通過實驗結果可以看出隻顯示了age字段的資料,age_1的資料并沒有顯示出來。

null值處理

此操作符用于處理null值,null值的處理稍微複雜,如下面的代碼所示:

跟期望的結果一樣,隻有“lily”被找出來了。

$mod取模運算

此操作符用于取模運算。例如查詢age取模10等于1的資料,如下面的代碼所示:

可以看出,隻顯示age取模6等于1的資料,其他不符合規則的資料并沒有顯示出來。

$ne不等于

此操作符用于布爾不等于的運算。例如查詢x的值不等于3的資料,如下面的代碼所示:

可以看出,隻顯示age不等于7的資料,age等于7的資料沒有顯示出來。

$in包含

此操作符與sql标準文法的用途一樣,即要查詢的資料在一個特定的取值範圍内。

例如,查詢x的值在2、4、6範圍内的資料,如下面的代碼所示:

可以看出隻顯示age等于7或8的資料,其他不符合規則的資料并沒有顯示出來。

$nin不包含

此操作符與sql标準文法的用途是一樣的,即要查詢的資料在一系列枚舉值的範圍外。

查詢x的值在2、4、6範圍外的資料,如下面的代碼所示:

通過結果可以看出隻顯示age不等于7或8的資料,其他不符合規則的資料并沒有顯示出來。

$size比對數組元素個數

此操作符用于統計數組中的元素個數。例如,對于記錄:

通過結果可以看出,表中共有2條資料。

skip限制傳回記錄的起點

此操作符用于過濾結果集中的某些行。例如,從第3條記錄開始,傳回5條記錄 ,如下面的代碼所示:

通過結果可以看出,表中第2條資料被顯示了出來。

sort排序

此操作符用于将結果集排序。例如,以年齡升序(asc)排列,如下面的代碼所示:

通過結果可看到第1條是age=20的,而後按降序排列結果集。

distinct去掉重複值

在表中可能會包含重複值,distinct操作符用來過濾掉多餘的重複記錄, 對于重複記錄隻保留一條。通常用它來傳回不重複記錄的條數,如下面的代碼所示:

name的不重複值為3個,age的不重複值為2個,調用distinct操作符後,傳回一個清單,裡面包含了不重複值的枚舉值。

注意 這種操作在資料量較大的表裡會比較耗時,請慎重使用這個功能。

group分組統計

by子句主要用于對where中得到的結果進行分組。也就是說,它在where子句之後執行,對經過where篩選後的結果按照某些列進行分組,之後進行相應的處理工作。

當使用聚集函數的時候,除非對整個語句的查詢結果集進行聚集運算,否則都要通過指定group by子句來确定是對某類結果集進行聚集運算,如下面的傳統sql代碼所示:

上面的語句用mongodb也是可以實作的,如下面的代碼所示:

參數說明:

1)key:要分組的列。本例中為a和b。

2)cond:分組條件。可以了解為where條件内容,本例中為active=1。

3)reduce: 分組計算的方法。本例中為sum(c)。

4)initial:分組計算的初始值。本例中指csum的值從0開始計算。

繼續閱讀