MongoDB學習筆記 查詢

2021-07-10 18:01:32 字數 2702 閱讀 5933

1.  基本查詢:

構造查詢資料。

> db.test.findone()

--多條件查詢。下面的示例等同於sql語句的where name = "stephen" and age = 35

> db.test.find()

--返回指定的文件鍵值對。下面的示例將只是返回name和age鍵值對。

> db.test.find({}, )

--指定不返回的文件鍵值對。下面的示例將返回除name之外的所有鍵值對。

> db.test.find({}, )

2.  查詢條件:

mongodb提供了一組比較操作符:$lt/$lte/$gt/$gte/$ne,依次等價於/>=/!=。

--下面的示例返回符合條件age >= 18 && age <= 40的文件。

> db.test.find(})

--下面的示例返回條件符合name != "stephen1"

> db.test.find(})

--$in等同於sql中的in,下面的示例等同於sql中的in ("stephen","stephen1")

> db.test.find(})

--和sql不同的是,mongodb的in list中的資料可以是不同型別。這種情況可用於不同型別的別名場景。

> db.test.find(})

--$nin等同於sql中的not in,同時也是$in的取反。如:

> db.test.find(})

--$or等同於sql中的or,$or所針對的條件被放到乙個陣列中,每個陣列元素表示or的乙個條件。

--下面的示例等同於name = "stephen1" or age = 35

> db.test.find(, ]})

--下面的示例演示了如何混合使用$or和$in。

> db.test.find(}, ]})

--$not表示取反,等同於sql中的not。

> db.test.find(}})

3.  null資料型別的查詢:

--在進行值為null資料的查詢時,所有值為null,以及不包含指定鍵的文件均會被檢索出來。

> db.test.find()

--需要將null作為陣列中的乙個元素進行相等性判斷,即便這個陣列中只有乙個元素。

--再有就是通過$exists判斷指定鍵是否存在。

> db.test.find(})

4.  正則查詢:

--mongodb中使用了perl規則的正則語法。如:

> db.test.find()

--i表示忽略大小寫

> db.test.find()

5.  陣列資料查詢:

--基於陣列的查詢。

--為後面的實驗構造資料。

--為後面的示例構造測試資料。

> db.test.find()

, "age" : 45 }

--當嵌入式文件為陣列時,需要$elemmatch操作符來幫助定位某乙個元素匹配的情況,否則嵌入式檔案將進行全部的匹配。

--即檢索時需要將所有元素都列出來作為查詢條件方可。

> db.test.findone(),]

}> db.test.find(}}}

, ] }

7.  游標:

資料庫使用游標來返回find()的執行結果,客戶端對游標可以進行有效的控制,如:限定結果集的數量、跳過部分結果、基於任意鍵的任意方向的排序等。

下面的例子將用於準備測試資料。

> db.testtable.remove()

> for (i = 0; i < 10; ++i) )

... }

我們可以通過cursor提供的hasnext()方法判斷是否還有未讀取的資料,再通過next()方法讀取結果集中的下乙個文件。如:

> var c = db.testtable.find()

> while (c.hasnext()) 01

2345

6789

當呼叫find()的時候,shell並不立即查詢資料庫,而是等待真正開始要求獲得結果的時候才傳送查詢,這樣在執行之前可以給查詢附加額外的選項。幾乎所有的游標方法都返回本身,因此可以像下面這樣將游標的方法鏈式組合起來。如:

> var c1 = db.testtable.find().sort().limit(1).skip(4);

> var c2 = db.testtable.find().limit(1).sort().skip(4);

> var c3 = db.testtable.find().skip(4).limit(1).sort();

此時,查詢並未執行,所有這些函式都是在構造查詢,當執行下面的語句時,查詢將被真正執行,

> c.hasnext()

查詢被傳送到伺服器,mongodb伺服器每次將返回一批資料,當本批被全部迭代後再從伺服器讀取下一批資料,直至查詢結果需要的資料被全部迭代。

對於上面的示例,limit(1)表示輸出結果僅為乙個,如果小於1,則不輸出,即limit(n)函式限定的是最多輸出結果。skip(4)表示跳過查詢結果中的前4個文件,如果結果小於4,則不會返回任何文件。sort()用於設定排序條件,即按照x鍵以公升序(1)的方式排序,如果需要降序排序可以改為:sort()。sort也可以支援多鍵排序,如:sort()即先按照username進行公升序排序,如果username的值相同,再以age鍵進行降序排序。這裡需要指出的是,如果skip過多的文件,將會導致效能問題。 

MongoDB學習筆記3 查詢

1.基本查詢 構造查詢資料。db.test.findone 多條件查詢。下面的示例等同於sql語句的where name stephen and age 35 db.test.find 返回指定的文件鍵值對。下面的示例將只是返回name和age鍵值對。db.test.find 指定不返回的文件鍵值對...

mongodb 學習筆記 高階查詢

spring 整合mongodb 高階查詢 分組查詢 groupby groupbyresultsorg.springframework.data.mongodb.core.mongotemplate.group criteria arg0,string arg1,groupby arg2,clas...

MongoDB學習筆記5 測試查詢效能

大規模資料匯入實驗 在上乙個實驗 中,我們測試了匯入資料的效能,簡單總結一下測試方法 1.schema 每行資料三個字段,日期 id和當日流量,都是長整型 2.index inventory.create index date ascending id ascending unique false,...