MongoDB資料庫查詢詳解
阿新 • • 發佈:2018-12-24
今天詳細講 增刪改查 中的查詢。
提前準備好了一個數據檔案,大家可以自己寫一個:
一、查詢全部資料:db.persons.find()
把它複製到命令列中會自動新增到資料中,使用db.persons.find()之後所有資料都展示出來了。
二、查詢指定的鍵對應的資訊:db.persons.find({ 條件 },{ 要查詢的鍵 })
如果我們只想要裡面的price相關的資料,不要_id和img的資料,就用到find裡面的引數,命令:db.persons.find({},{_id:0,price:1}) 其中第一個引數是個空物件,表示從全部的資料中查詢。我們可以看到這裡沒有寫img1=0,但是也沒有顯示出來,如果_id=0這個不寫的話是會顯示出_id的資訊的,這是個小注意點。
三、按條件查詢:
1、對應的條件語句:$lt ----- < ; $lte ----- <= ; $gt ----- > ; $gte ----- >= ; $ne ----- !=
舉個例子:要查詢價格加個在[20,30]之間的資料:db.persons.find({price:{$gte:20,$lte:30}},{_id:0,price:1}) ,同樣的道理,這裡是在第一個引數限定的範圍內找第二個引數中的資訊。
再來一個:查詢image1不是img/IMG_6105_03.png 的資訊。
2、$in和$nin 查詢 包含或不包含 (只能用在陣列集合上,和下面的$not區分開)
例如:查詢包含 "image1" : "img/IMG_6104_03.png"和"image1" : "img/IMG_6105_03.png" 的整條資料資訊。反之使用$nin。
3、or查詢 滿足條件1或者滿足條件2個的資料
例如:查詢"image1" : "img/IMG_6104_03.png" 或 price小於20的資料
4、正則查詢
例如:查詢image1中包含 6105_03 的資料
5、$not :(取反)
例如:查詢image1中不包含 6105_03 的資料,我們可以看到這次查出來的資料和上面那個查出來的資料加一塊就是全部的資料。
下面主要講陣列相關的查詢
6、陣列查詢和index使用(①:查詢陣列中包含某個內容的那條資料,②:查詢某個陣列中的第幾項是什麼)
先來新增幾個陣列資訊(給images是img/IMG_6104_03.png的資料新增一個數組books)
現在是這樣
現在來查詢陣列中有cc和aa的資料
如果要查詢第陣列中第2項內容是ee的:(注意:這裡的books.1是加引號的)
7、查詢出陣列長度是2的資料 (注意:這裡的$size不能和比較符一起使用,也就是說不能使用陣列長度小於2這樣查詢,見下一個方法)
8、把$size和比較符一起使用:
①:先來給每條資料新增一個size鍵,他的值對應陣列長度,修改後的資料如下:
下面我們要做的是每次books中增加新內容的時候,size的值也跟著變化,這樣我們就可以通過對size的大於小於來進行和$size的配合使用。
②:首先,在增加陣列內容的同時把size的值增加1:
③:再來檢視陣列長度大於2的資料
9、利用shell來檢視 價格是26的資料下 books 的陣列長度:
var prices = db.persons.find({price:26}) ---->因為此時find出來的price是26的資料可能不止一條,所以下面要使用遍歷的方式去獲得books的陣列長度。
10、$slice 查詢:針對陣列查詢
例如:查詢price是16的這條資料中books 中的第一個到第二個的資料,再查詢第二個到第三個資料,注意看這裡當有其實索引為0的時候跟其他時候的區別
查詢陣列中的最後一項:只需要把slice的條件改成-1。
11、$elemMatch 查詢:根據陣列物件中的條件進行查詢,也可以是條件組合,多個條件順序不分先後
db.persons.find({class:{$elemMatch:{b:"022",a:"001"}}},{_id:0,class:1})四、分頁與排序
1、查詢persons中的前兩條資料:db.persons.find({},{_id:0,class:1}).limit(2)
2、查詢persons中第2到第4條資料:db.persons.find({},{_id:0,class:1}).limit(3).skip(1) ,limit裡的數是顯示幾條資料,skip裡的是從哪裡開始,注意這個索引是從0開始的。
3、排序:返回按照 price 大小進行排序的結果
原資料:排序後:分別是正序和倒序
2017年第一天,祝大家新年快樂哦!