1. 程式人生 > >mongodb_查詢操作使用_條件查詢、where子句等

mongodb_查詢操作使用_條件查詢、where子句等

1.find()/findOne()
mongodb資料庫的查詢操作即使用find()或者findOne()函式,也可根據不同的條件進行查詢。查詢的寫法(以find()為例)可以如下:
db.A.find()/db.A.find({})

"{}"是否省略不影響查詢,都表示查詢集合A下的所有文件。也可以以文件做條件:db.A.find({"a":1,"b":1}),其中查詢同時滿足屬
性a等於1且屬性b也等於1的文件,若需要滿足屬性c等於1,可直接新增到文件中:db.A.find({"a":1,"b":1,"c":1})。

2.指定鍵的設定
指定鍵的設定即展示,比如某集合有10個屬性,經查詢後只關心集合中文件的某幾個屬性。如下文件:
{ "_id" : ObjectId("5018da521781352fe25bf4d2"), "a" : "1", "b" : "1", "c" : "1", "d" : "1", "e" : "1" }
只關係屬性a,b,c可如下設定:
db.A.find({},{"a,":1,"b":1,"c":,"_id":0})
這裡的1和0與文件中的鍵值是不同意義的,這裡的1:表示顯示,0:表示不顯示。其中"_id"鍵預設存在的,需要顯示設定。

結果如下:
{ "a" : "1", "b" : "1", "c" : "1" }

--------------------------------------條件查詢可類比結構化查詢語句SQL--------------------------------------------
3.條件查詢
3.1 條件操作符
"$lt"===================>"<"
"$lte"==================>"<="
"$gt"===================>">"
"$gte"==================>">="
"$ne"===================>"!="

如:某集合B集合中文件有屬性x值為整數,需查詢10<x<=30的文件,寫法如下:
db.B.find({"x":{"$gt":10,"$lte":30}})

如:從某集合B中查詢日期屬性day值大於2012/01/01的文件資料,寫法如下:
db.B.find({"day":{"$gt":new Date("2012/01/01")}})
適合於需要進行日排程、月排程、周排程資料等業務處理範圍的場合。

3.2 $in包含/$nin不包含
$in:查詢匹配指定條件值的文件;
$nin:查詢不匹配指定條件值的文件;

SQL:寫法:欄位 in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$in":['值1','值2',.....]}})

SQL:寫法:欄位 not in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$nin":['值1','值2',.....]}})

$in/$nin優點:可指定不同型別條件和值。

3.3 $or或查詢

$or:查詢匹配多個條件多個值的文件;

SQL:寫法:欄位1 = 'xxx' or 欄位2 in ( 'xxx').....
mongodb:db.B.find({"$or":[{"x":{"$in":['值1','值2'...]}},{"y":"3"}]})

3.4 $all匹配所有

比如文件:
{"name":jack,"age":[1,2,3]}
{"name":jack,"age":[1,4,3]}

db.B.find({"age":{"$all":[2,3]}})結果:{"name":jack,"age":[1,2,3]}

3.5 $exists 判斷文件屬性是否存在

db.B.find({"name":{"$exists":true}})   --查詢屬性name存在的文件
db.B.find({"name":{"$exists":false}})  --查詢屬性name不存在的文件

3.6 屬性值為null情況
如下操作並可知道:
> db.C.find()
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
> db.C.find({"c":null})
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
可見查詢屬性c值為null文件,包括屬性c值為null、該屬性c不存在兩個部分。若想只查詢屬性c為null的文件
如下:
> db.C.find({"c":{"$in":[null],"$exists":true}})
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }

3.7 $not元條件句

可與其他條件配合使用,即不在匹配範圍之內的文件,下面可見其用法。

3.8 $mod取模運算

db.B.find({"age":{"$mod":[5,1]}}) --表示查詢年齡/5餘1的所有文件

若查詢年齡/5餘1之外的所有文件,可結合$not運算:
db.B.find({"age":{"$not":{"$mod":[5,1]}}})

3.9 正則表示式

db.B.find({"name":/jack/i})

3.10 $size

> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.find({"b":{"$size":2}})
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }

3.11 $slice

返回陣列的一個子集,即對以某屬性為基礎,返回多少條(範圍)。也可以接受偏移值和要返回的元素數量,來返回中間的結果。
> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.findOne({},{"b":{"$slice":[2,3]}})
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 3 ] }
> db.C.findOne({},{"b":{"$slice":-2}})
{
        "_id" : ObjectId("501e71557d4bd700257d8a41"),
        "a" : "1",
        "b" : [
                2,
                3
        ]
}

3.12 $where

即可執行任務javascript作為查詢的一部分。
$where的值可以是function、也可以是字串等等。

db.C.find({"$where":function(){return this.a == "1"}})與db.C.find({"$where":"this.a == '1'"}})

注意:採用$where子句查詢在速度上較常規查詢慢的多。因文件需要從BSON轉換成javascript物件,然後通過"$where"的表示式來執行。
      不用利用索引。可用常規查詢做前置過濾,配置"$where"查詢進行調優,可達到不犧牲效能的要求。


4 遊標

使用遊標返回find的執行結果,客戶端對遊標的實現通常能對結果進行數量的限制、略過部分結果、排序等有效控制。

var cursor = db.C.find()     --定義遊標
while(cursor.hasNext()){
 var obj = cursor.next();
 print(obj.a);
 ......
}

db.C.find().limit(10)  --限制查詢的結果條數為10條
db.C.find().skip(10)   --忽略匹配的前10條,顯示從第11條匹配的文件開始所有的文件
db.C.find().sort({"a":-1})  --sort以鍵/值,表示按某個屬性進行排序,1:升序,-1:降序

高階查詢選項:
$maxscan:integer  --指定查詢最多掃描的文件數量
$min:document     --查詢的開始條件
$max:document     --查詢的結束條件
$hint:document    --指定伺服器使用哪個索引進行查詢
$explain:boolean  --獲取查詢執行的細節(用到的索引、結果數量、耗時等),而並非真正執行查詢
$snapshot:boolean --確保查詢的結果是在查詢執行那一刻的一致快照

相關推薦

mongodb_查詢操作使用_條件查詢where子句

1.find()/findOne() mongodb資料庫的查詢操作即使用find()或者findOne()函式,也可根據不同的條件進行查詢。查詢的寫法(以find()為例)可以如下: db.A.find()/db.A.find({}) "{}"是否省略不影響查詢,都表示查

28示例1--完成登入操作條件查詢

學習目標: 1、再通過示例鞏固前面學習的知識 2、熟練使用MVC思想指導實際專案的開發 學習過程: 我們先完成登入吧這裡我們把業務邏輯分為使用者管理和登入兩個,所以我們建立兩個Servlet:LoginServlet和UserServlet,我們先完成登入功能。 一、登入功能

ThinkPHP框架五對資料的操作條件查詢

條件查詢 //查詢主鍵為2的記錄 //$list = M('goods')->select(2); //批量查詢這些主鍵 //$list = M('goods')->sele

Python數據庫查詢之組合條件查詢-F&Q查詢

不一定 ann 不用 pre cnblogs all 其他 port annotate F查詢(取字段的值) 關於查詢我們知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分組,還會用到aggregate和annotate

DQL資料查詢語言_查詢不會修改資料庫記錄!)

一、基本查詢 1、欄位(列)控制 1)查詢所有列 SELECT * FROM 表名; 2)查詢指定列 SELECT 列1,列2,……,列n FROM 表名; 3)完全重複的記錄只一次 當查詢結果中的多行記錄一模一樣時,只顯示一行,一般查詢所有列

django分頁查詢及對已經分頁的資料進行查詢,對條件查詢後的資料再次分頁

#適用於妹子UI的分頁前端,其他的也沒問題,稍做修改即可 #對已經分頁的資料進行查詢,對查詢後的資料再次進行分頁 #思路:url請求除了需要帶current page 還需要帶查詢的內容,以此判斷是否查詢後的資料分頁 直接上程式碼: pages:包含兩個類1. Pagination表示對全部

angularJS 條件查詢 品優購條件查詢品牌(條件查詢和列表展示公用方法解決思路 及 post請求混合引數提交方式)

  Brand.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"

springboot+jpa查詢(拼接條件查詢

最近在學習springboot使用jpa操作資料庫,總結一下。 Dao層建立與JavaBean對應的介面,繼承JpaRepository<K,E>介面 @Repository public interface AccountDao extends JpaRepository&

HBase條件查詢(多條件查詢

Author:Pirate Leo轉載請註明出處,謝謝。文中可能涉及到的API:Begin!HBase的查詢實現只提供兩種方式:1、按指定RowKey獲取唯一一條記錄,get方法(org.apache.hadoop.hbase.client.Get)2、按指定的條件獲取一批記

03: 數據導入導出 表記錄基本操作 查詢及匹配條件 多表查詢

ins 3.5 添加 add class 文件名 tween 數值 平均值 day03一數據導入二數據導出三管理表記錄 *3.1 插入表記錄3.2 查詢表記錄 (單表 多表 嵌套 連接)3.3 條件匹配3.4 更新表記錄字段的值3.5 刪除表記錄++++++

extjs3 分頁操作(帶查詢條件),獲取頁碼開始行分頁大小

一、分頁操作 extjs3.x版本做分頁操作時,只需配置PagingToolbar 即可,總的來說還是比較方便的,但是預設情況下是不能進行帶查詢條件的分頁操作的,如何解決呢? //xxx表示檔名,xxx.js xxx.prototype.grid=function(){

java操作mongodb,泛型封裝增刪查改條件查詢操作

本文實現一個通用泛型封裝實現類,需要給定一個集合物件,類似mysql中與java對應的表;思想就是把給定的物件解析出所有非空欄位,儲存到一個BasicDBObject中,這裡一定要保證java物件與mongodb中的文件欄位名字一樣,因為程式碼為了實現通用,是預設以java物

Java操作Hbase進行建表刪表以及對資料進行增刪改查,條件查詢

1、搭建環境   新建JAVA專案,新增的包有:    有關Hadoop的hadoop-core-0.20.204.0.jar    有關Hbase的hbase-0.90.4.jar、hbase-0.90.4-tests.jar以及Hbase資源包中li

Yii2.0-advanced-10—資料庫操作4(AR條件查詢where

條件查詢 $customers = Customer::find()->where($cond)->all();  $cond就是我們所謂的條件,條件的寫法也根據查詢資料的不同存在差異,那麼如何用yii2的方式來寫查詢條件呢? [[簡單條件]] // 

MySQL第二天--where條件查詢檢視及函式

//把資料庫匯出到指令碼檔案 mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql //--databases是需要兩個-- Where

一個可以添加商品查詢商品的程序,登錄成功的話,再去操作,添加查詢商品,添加商品也是寫在文件裏面

指定 true rod 成功 文件 font split digi 邏輯 #寫一個可以添加商品、查詢商品的這麽程序#1、先登錄,登錄的用戶名和密碼都是寫在文件裏面的#1、讀文件、字符串分割#2、登錄成功的話,再去操作,添加、查詢商品,添加商品也是寫在文件裏面#1、讀寫文件,

漲知識,漲知識 :ThinkPHP框架下Where條件查詢Mysql數據庫某字段是否為空

field 打印 想要 sts bsp ech 是否為空 time inf 代碼虐我千百遍,我對代碼如初戀~ 問題: 查詢某字段app_date數據是否為NULL,正常我們實現的辦法是: $map[‘app_data‘] = array(‘eq‘,‘null

PHP連接數據庫實現多條件查詢與分頁功能——關於租房頁面的完整實例操作

ots cnblogs 信息 val 租房 btn earch 拼接 round 租房頁面如圖: 代碼如下: <!DOCTYPE html><html> <head> <meta charset="UTF-8"

yii2數據條件查詢-where專題

user attr isset sof sta margin con type name 條件查詢 $customers = Customer::find()->where($cond)->all(); $cond就是我們所謂的條件,條件的寫法也根據查詢數據的

Mysql(三)-數據導入,導出管理表記錄條件匹配查詢方式

數據導入導出、管理表記錄、條件匹配##############################################################################################一、數據導入:把系統文件內容存儲到數據庫的表裏命令:load data infile &