中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mongodb常用命令之查詢

發布時間:2020-07-20 06:55:28 來源:網絡 閱讀:7454 作者:water_lang 欄目:MongoDB數據庫

上一篇講完了mongodb的增、刪、改,本文就來講解他的強大的查詢功能。

一、find命令簡介及初探

mongodb中的查詢使用的是find()命令。他2個參數,第一個參數是你的查詢條件(默認為{}表示查詢所有),第二個參數是指定你要返回的鍵(默認為{}表示返回所有)。下面我們將詳解find()命令:

初始數據:db.user.save({name:"zhangsan",age:26,sex:"women",num:[1,2,4],height:164})

                             db.user.save({name:"lisi",age:22,sex:"man",num:[2,3,4],height :null})  

                            db.user.save({name:"wangwu",age:29,sex:"man"})

        a.查詢user集合中所有的數據:db.user.find(),其實db.user.find()db.user.find({})的簡寫,看著方便,舒服。

        b.查詢namelisi而且age22的文檔:db.user.find({name:"lisi",age:22});

        c.從返回的結果指定的返回鍵,查詢namelisi且只返回age:db.user.find({name:"lisi"},{age:1}),但是你會發現"_id"這個鍵總是會返回回來,即使你沒指定也一樣,你可以使用{"_id":0}來不讓其返回,如db.user.find({name:"lisi"},{age:1,"_id":0}).

        d.指定返回結果中不希望有某些個鍵,如查詢namelisi只不返回age這個鍵:db.user.find({name:"lisi"},{age:0}),其實和上一條差不多,只是相反。

在這里不得不說的就是findOne命令:他表示只返回結果中的第一條數據,如:

        db.user.findOne();


二、深入了解find()里的各種查詢


$lt,$lte,$gt,$gte(條件句):他們分別對應的是:<,<=,>,>=

例:查詢年齡在2226()之間的數據:db.user.find({age:{$gte:22,$lte:26}})

$nene也就是not equal ,說白點就是不等于。

例:查詢年齡不等于22的數據:db.user.find({age:{$ne:22}})


   原文地址:http://1145004.blog.51cto.com/1135004/1265522    


$in,$all,$nin(三個跟的是數組):這三個查詢操作可以接受一個到多個值的列表,也就是一個數組。

$inmysqlin關鍵字很像,也相當于mysql中的or關鍵字的意思,表示滿足這個數組之內的值之一都能查詢出來.

例:查詢namezhangsanlisi的數據:db.user.find({name:{$in:["zhangsan","lisi"]}})

                  $nin:這個就是not in的縮寫,in相反,也就是不在該數組之內的值會被查詢出來。

例:db.user.find({name{$nin:["zhangsan","wangwu"]}})將返回namelisi的文檔,而不會返回namezhangsanwangwu的文檔。


$all這個東西和$in很像,但$all要求必須滿足數組內所有的值。

例:db.user.find({num:{$all:[1,2]}})能查出{num:[1,2,4]}的文檔,而查不出{num:[2,3,4]}的文檔。

$or因為$in等只能對單一個鍵進行查詢,而$ormysql中的or差不多,對多個鍵進行或者查詢(只要滿足其一就能查詢出來),or后面跟的是一個數組。

例:查詢出name"lisi"或者年齡為24的數據:db.user.find({$or:[{name:"lis"},{age:24}]})

$mod表示取余。

例:db.user.find({age:{$mod:[5,1]}})表示將查詢age1,6,11,1621,26等用戶,這里就會查詢出age26的用戶。


注(重)

        1。條件句(如$lt)是內層文檔的鍵,修改器(如$set)是外層文檔的鍵。一個鍵可以有多個條件,但一個鍵不能對應多個更新修改器。如:db.user.update({name:"wangwu"},{$inc:{age:1},$set:{age:20}})這樣更新不成功,因為age鍵被修改了兩次。

        2$in,$all會用到索引,而$nin不會用到索引,故多優先推薦$in,$all使用。


null值的查詢:null是一個奇怪的東西。我們通過例子來查看,

例:我們要查詢出heigthnull的數據,db.user.find({height:null})你會發現返回的不光是{height:null}的值,還會返回沒有height鍵的文檔。如果僅想要匹配鍵值為null的,還須要用到$exists操作符。db.user.find({height:{$in:[null],$exists:true}})就能只返回heightnull的文檔了。注:由于mongodb"$eq"操作符號,所以使用$in來代替。


正則表達示:能夠很靈活的匹配字符串,例如實現mysql中的like功能。

例:

查詢namew開頭的數據:

                  db.user.find({name:/^w/});

查詢name 包括si的數據:

                  db.user.find({name:/si/});

查詢name 包括si或者SI的數據(也就是不區分大小寫)

                  db.user.find({name:/si/i})   ,i表示不區分大小寫。


三、數組:


前面的$in,$all都是用于數組的,前面講過了這里就不再解釋了。

        $size針對數組用的,可用于查詢指定數組的長度。

例:我要查詢出num的長度為3的數據,db.user.find({num:{$size:3}})


$slice因為find第二個參數是指定返回的鍵,但$slice返回數組的一個子集合。讓我們通過例子來說明他的用法及作用。

例:

                  a.我想返回name" zhangsan "num數組的前兩個值:

                   db.user.find({name:" zhangsan "},{num:{$slice:2}}),就會返rsult的所有鍵且num數組只會返回前兩個元素[12]

                  b.我想返回name" zhangsan "num數組的最后兩個值:

                   db.user.find({name:"zhangsan "},{num:{$slice:-2}}),就會返rsult的所有鍵且num數組只會返回前兩個元素[24]

                  c.我想返回name" zhangsan "num數組的第二到第三個元素:

                    db.user.find({name:" zhangsan "},{num:{$slice:[1,3]}}),就會返rsult的所有鍵且num數組會跳過第一個元素而返回第二個和第三個元素[24]


通過指定數組位置來查詢:

例:db.user.find({"num.1":3})表示查詢num數組的第二個位置值為3的文檔,即返回namelisi的文檔。


統計一個文檔某一數組的長度(大小):

例:我們要得到namezhangsan文檔中num組的長度,db.user.findOne({name:"zhangsan"}).num.length.


查詢內嵌文檔:

來兩條初始數據:db.user.save({name:"zangsan",age:22,stu:{name:"lidao",age:21}});

                                              db.user.save({name:"lisi",age:23,stu:{name:"xiaodao",age:20}});

我們要查詢lisi的學生姓名為xiaodao的文檔:db.user.find({"stu.name":"xiaodao"})

注意:我們在使用內嵌查詢時在鍵上一定要加"",不然會報錯的,如"stu.name"正確,而stu.name會報錯誤。


四、游標:

        mongodb使用游標來返回find的執行結果,因為游標類還實現了迭代器接口,所以還在可以在foreach中使用。

這里用一個簡單的例子來說明:

        var result =  db.user.find()

        while(result.hasNext){

                  obj  = result.next();

                  print(obj.name);      

        }

$where有些需求無法滿足時,$where就出現了,用它可以執行任意js作為查詢的一部分,有了他幾乎能做任何事。

例:查詢年齡大于26的數據:

        db.user.find({$where:"this.age> 26"})

他等同于:=>var f =function(){return this.age > 26;}  

                           =>db.user.find(f)


$limit限制返回結果用的,此外$limit指定的是上限而非下限,如果不夠就返回查詢到的全部。

例:我要返回user集合所有數組的前兩條,db.user.find().limit(2);


$skip他配合$limit使用的,也可以單獨使用,且盡量避免過大量結果。我們通過例子說明。

例: db.user.find().skip(1);表示從第二條數據返回,也就是只返回namelisiwangwu的文檔。

                  db.user.find().skip(1).limit(1);表示從第二條數據返回且只返回第一條數據,即namelisi的文檔。

注:$skip不適合作分頁使用,因為假如有一百萬數據,你就要略過大量結果,所以效率非常你,不適合作分頁。


$sort對返回的結果進行排序。

例:db.user.find().sort({age:1}),表示將返回的結果按age鍵進行升序排列。


最后一個說明 distinct操作:表示獲取特定鍵中不同值列表的最簡單的工具。

例:db.user.find("name")他將返回["zhangsan","lisi","wangwu"]

注:distinct返回是有限制的,他的返回結果必須是16M


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

虞城县| 昆明市| 华坪县| 云浮市| 武邑县| 新竹县| 福贡县| 武功县| 当阳市| 长汀县| 渑池县| 宜州市| 湘阴县| 河北区| 蕉岭县| 阜南县| 天全县| 龙泉市| 南郑县| 鸡西市| 寿宁县| 绥宁县| 花垣县| 谢通门县| 万载县| 北碚区| 闻喜县| 东乌珠穆沁旗| 安阳县| 公安县| 青田县| 安丘市| 柳州市| 胶南市| 隆尧县| 鹤岗市| 高淳县| 定远县| 定日县| 清新县| 阿坝|