成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MongoDB學(xué)習(xí)札記第四篇之Query

RebeccaZhong / 781人閱讀

摘要:系列專題查詢條件首先往數(shù)據(jù)庫集合里面插入幾條數(shù)據(jù)。指定了之后,顯示具體的條數(shù),上文中,表示,顯示條文檔。其中,表示要排序的字段,的可取值為。要對集合進行排序。其中按照升序,按照降序。發(fā)現(xiàn)逆序排序了。至此,說明我們的實驗成功了。

  

系列專題http://www.codefrom.com/p/mongodb

查詢條件

首先往數(shù)據(jù)庫集合里面插入幾條數(shù)據(jù)。
測試數(shù)據(jù):

> db.users.insert({username:"mongo", url:"webinglin.github.io", tags:["mongodb", database","nosql"],likes:999, author:"linwenbin"})
> db.users.insert({username:"redis", url:"webinglin.github.io", tags:["redis","database","nosql"],likes:888, author:"linwenbin"})
> db.users.insert({username:"spring", url:"webinglin.github.io", tags:["spring","framework"],likes:777, author:"linwenbin"})

> db.users.find().pretty()
{
        "_id" : ObjectId("5574bdabc705777157a515aa"),
        "username" : "mongo",
        "url" : "webinglin.github.io",
        "tags" : [
                "mongodb",
                "database",
                "nosql"
        ],
        "likes" : 999,
        "author" : "linwenbin"
}
{
        "_id" : ObjectId("5574bdd2c705777157a515ab"),
        "username" : "redis",
        "url" : "webinglin.github.io",
        "tags" : [
                "redis",
                "database",
                "nosql"
        ],
        "likes" : 888,
        "author" : "linwenbin"
}
{
        "_id" : ObjectId("5574bdf3c705777157a515ac"),
        "username" : "spring",
        "url" : "webinglin.github.io",
        "tags" : [
                "spring",
                "framework"
        ],
        "likes" : 777,
        "author" : "linwenbin"
}

pretty() 方法是對查詢結(jié)果進行格式化
查詢的時候可以帶上查詢條件,那具體的查詢條件怎么使用?
等于
等于操作直接使用 {key:value} 這樣的文檔形式即可

> db.users.find({username:"mongo"})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
>

大于
語法: {key : {$gt:value} }

> db.users.find({likes:{$gt:888}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
>

大于等于
語法: {key : {$gte:value} }

> db.users.find({likes:{$gte:888}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : "webinglin.github.io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, "author" : "linwenbin" }

小于
語法: {key : {$lt:value} }

> db.users.find({likes:{$lt:888}})
{ "_id" : ObjectId("5574bdf3c705777157a515ac"), "username" : "spring", "url" : "webinglin.github.io", "tags" : [ "spring", "framework" ], "likes" : 777, "author" : "linwenbin" }

小于等于

語法: {key : {$lte:value}}

> db.users.find({likes:{$lte:888}})
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : "webinglin.github.io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdf3c705777157a515ac"), "username" : "spring", "url" : "webinglin.github.io", "tags" : [ "spring", "framework" ], "likes" : 777, "author" : "linwenbin" }

不等于
語法: {key : {$ne:value} }

> db.users.find({likes:{$ne:888}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdf3c705777157a515ac"), "username" : "spring", "url" : "webinglin.github.io", "tags" : [ "spring", "framework" ], "likes" : 777, "author" : "linwenbin" }

且操作 AND
語法: {key1:value1, key2:value2, key3:value3 …}

> db.users.find({likes:{$gt:777},username:"mongo"})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }

> db.users.find({likes:{$gt:777}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : "webinglin.github.io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, "author" : "linwenbin" }

或操作 OR

語法: { $or: [ {key1: value1}, {key2:value2} ] } 將or條件的所有 {key:value} 都放在 $or 的value中(數(shù)組)

> db.users.find({$or:[{username:"mongo"},{username:"redis"}]})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : "webinglin.github.io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, "author" : "linwenbin" }

復(fù)雜條件查詢

如何將所有的條件都連起來用呢?

比如我們想要這樣查詢 like>=888 && (username=”mongo” or username=”spring”)
由于上面的數(shù)據(jù)只有三條, 我們知道 like>=888 只有 mongo 和 redis 這兩條數(shù)據(jù)滿足條件, 后面的username=”mongo” or username=”spring” 又有 mongo和 spring 滿足條件, 這兩個and操作之后 就只剩下 mongo 這條數(shù)據(jù)滿足條件了。 所以最終應(yīng)該查出一條mongo的Document.

> db.users.find({likes:{$gte:888},$or:[{username:"mongo"},{username:"spring"}]})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
>

find() 其他用法
Projection

mongodb中 projection 意味著顯示你希望看到的字段而非所有的字段都顯示,這是什么意思呢?

比如: 我們的測試數(shù)據(jù)里面有那么多的字段: username,likes,tags,author,url 而我們經(jīng)常要用到的就只有 username 和 likes 那么就顯示這兩個字段就好了,其他的字段就別顯示出來了。

find({},{KEY:1/0}) find的第二個參數(shù),KEY為要顯示或隱藏的字段,value為1表示顯示,0表示隱藏,看著也很簡單,試一下吧


> db.users.find({},{_id:0,url:0,tags:0,author:0}) { "username" : "mongo", "likes" : 999 } { "username" : "redis", "likes" : 888 } { "username" : "spring", "likes" : 777 } >

limit, skip, sort

為了更好的測試分頁的效果,新建一個集合,并插入30條數(shù)據(jù)

> for(var i=0; i<30; i++){
... db.pages.insert({"val":i});
... }
WriteResult({ "nInserted" : 1 })
> db.pages.find()
{ "_id" : ObjectId("5574ca7b192e9dda0925e37f"), "val" : 0 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e380"), "val" : 1 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e381"), "val" : 2 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e382"), "val" : 3 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e383"), "val" : 4 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e384"), "val" : 5 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e385"), "val" : 6 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e386"), "val" : 7 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e387"), "val" : 8 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e388"), "val" : 9 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e389"), "val" : 10 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38a"), "val" : 11 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38b"), "val" : 12 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38c"), "val" : 13 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38d"), "val" : 14 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38e"), "val" : 15 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38f"), "val" : 16 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e390"), "val" : 17 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e391"), "val" : 18 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e392"), "val" : 19 }
Type "it" for more



> db.pages.find().limit(5)
{ "_id" : ObjectId("5574ca7b192e9dda0925e37f"), "val" : 0 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e380"), "val" : 1 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e381"), "val" : 2 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e382"), "val" : 3 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e383"), "val" : 4 }

可以發(fā)現(xiàn),如果使用 limit方法的話會顯示整個集合的所有文檔。 指定了 limit 之后, 顯示具體的條數(shù),上文中,limit(5) 表示, 顯示5條文檔。

limit方法除外,還有一個 skip 方法,skip也是接受一個整型的參數(shù),表示查詢結(jié)果跳過多少個文檔。

例如上面插入的30條記錄中,我們要顯示18-22條記錄,那么就應(yīng)該使用
db.pages.find().skip(18).limit(5)

> db.pages.find().skip(18).limit(5)
{ "_id" : ObjectId("5574ca7b192e9dda0925e391"), "val" : 18 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e392"), "val" : 19 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e393"), "val" : 20 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e394"), "val" : 21 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e395"), "val" : 22 }

skip和limit的組合就能做到分頁的功能了。但是如果數(shù)據(jù)量很大,理論上分頁就會變得很慢了,比如有一億條數(shù)據(jù),要拿最后一頁。那skip的數(shù)據(jù)量就很多很多了。這樣就會變得比較慢。話說回來,有誰會看數(shù)據(jù)看到最后的幾頁?正常都是看前面幾頁數(shù)據(jù),所以,skip和limit實現(xiàn)分頁是可以接受的。

在mongodb中,如果要對查詢結(jié)果排序,那么需要使用sort方法。sort方法接收一個文檔參數(shù)。也就是{key:value}的形式。其中,key表示要排序的字段,value的可取值為 1 / -1 。1表示升序asc,-1表示降序desc。話不多說,直接上例子:

> db.pages.find().sort({val:-1})
{ "_id" : ObjectId("5574ca7b192e9dda0925e39c"), "val" : 29 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e39b"), "val" : 28 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e39a"), "val" : 27 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e399"), "val" : 26 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e398"), "val" : 25 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e397"), "val" : 24 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e396"), "val" : 23 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e395"), "val" : 22 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e394"), "val" : 21 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e393"), "val" : 20 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e392"), "val" : 19 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e391"), "val" : 18 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e390"), "val" : 17 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38f"), "val" : 16 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38e"), "val" : 15 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38d"), "val" : 14 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38c"), "val" : 13 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38b"), "val" : 12 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38a"), "val" : 11 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e389"), "val" : 10 }
Type "it" for more

這個是對val這個key進行逆序排序,所以value取值為-1。 那value值為1的話,就變成升序了。

> db.pages.find().sort({val:1})
{ "_id" : ObjectId("5574ca7b192e9dda0925e37f"), "val" : 0 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e380"), "val" : 1 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e381"), "val" : 2 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e382"), "val" : 3 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e383"), "val" : 4 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e384"), "val" : 5 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e385"), "val" : 6 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e386"), "val" : 7 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e387"), "val" : 8 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e388"), "val" : 9 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e389"), "val" : 10 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38a"), "val" : 11 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38b"), "val" : 12 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38c"), "val" : 13 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38d"), "val" : 14 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38e"), "val" : 15 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e38f"), "val" : 16 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e390"), "val" : 17 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e391"), "val" : 18 }
{ "_id" : ObjectId("5574ca7b192e9dda0925e392"), "val" : 19 }
Type "it" for more
>

那如果要對多個值進行組合排序呢? 就好比如對于我們最初的例子 users 集合。 要對users集合進行排序。其中 按照likes升序, 按照username降序。為了達到我們的效果,我們再往users集合里面插入兩條數(shù)據(jù)

> db.users.insert({username:"mongodb",likes:999})
> db.users.insert({username:"springMVC",likes:888})

下面是運行結(jié)果,注意觀察 likes為888的兩個文檔。發(fā)現(xiàn)username逆序排序了。至此,說明我們的sort實驗成功了。

> db.users.find().sort({likes:1,username:-1}).pretty()
{
        "_id" : ObjectId("5574bdf3c705777157a515ac"),
        "username" : "spring",
        "url" : "webinglin.github.io",
        "tags" : [
                "spring",
                "framework"
        ],
        "likes" : 777,
        "author" : "linwenbin"
}
{
        "_id" : ObjectId("5574cefa192e9dda0925e39e"),
        "username" : "springMVC",
        "likes" : 888
}
{
        "_id" : ObjectId("5574bdd2c705777157a515ab"),
        "username" : "redis",
        "url" : "webinglin.github.io",
        "tags" : [
                "redis",
                "database",
                "nosql"
        ],
        "likes" : 888,
        "author" : "linwenbin"
}
{
        "_id" : ObjectId("5574cef5192e9dda0925e39d"),
        "username" : "mongodb",
        "likes" : 999
}
{
        "_id" : ObjectId("5574bdabc705777157a515aa"),
        "username" : "mongo",
        "url" : "webinglin.github.io",
        "tags" : [
                "mongodb",
                "database",
                "nosql"
        ],
        "likes" : 999,
        "author" : "linwenbin"
}
>

原作者:webinglin

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/18751.html

相關(guān)文章

  • MongoDB學(xué)習(xí)札記第六篇之主從復(fù)制

    摘要:系列文章請看環(huán)境準備主從復(fù)制是中最常見的復(fù)制方式。本次試驗中,我們采用一個主節(jié)點,一個從節(jié)點。重啟一下即可正常運行。執(zhí)行完這條語句之后既可以正常操作了。具體怎么創(chuàng)建用戶參考學(xué)習(xí)札記第二篇之安全參考權(quán)威指南官網(wǎng)手冊 mongo系列文章請看http://www.codefrom.com/p/mongodb 環(huán)境準備: ubuntu12.0.4 mongodb3.0....

    guyan0319 評論0 收藏0
  • MongoDB干貨篇之查詢

    摘要:如果的值大于數(shù)組中元素的數(shù)量,該查詢返回數(shù)組中的所有元素的。數(shù)組參數(shù)使用格式,其中第一個值表示在數(shù)組中跳過的項目數(shù)第二個值表示返回的項目數(shù)。 MongoDB干貨篇之查詢 準備工作 在開始之前我們應(yīng)該先準備數(shù)據(jù)方便演示,這里我插入的了幾條數(shù)據(jù),數(shù)據(jù)如下: db.user.insertMany( [{ name:jack, age:22, sex:M...

    RdouTyping 評論0 收藏0
  • MongoDB干貨篇之數(shù)據(jù)更新

    摘要:默認為如果為的話和一樣的效果下面將會更新所有匹配到的數(shù)據(jù)字段更新操作符用來指定一個鍵的值。語法當對數(shù)組字段進行更新時,且沒有明確指定的元素在數(shù)組中的位置,我們使用定位操作符標識一個元素,數(shù)字都是以開始的。 MongoDB干貨篇之數(shù)據(jù)更新 原文地址 https://chenjiabing666.github... 常用的函數(shù) update(,,,),其中表示篩選的條件,是要更新的數(shù)據(jù) ...

    kidsamong 評論0 收藏0
  • chrome擴展開發(fā)之旅 四篇

    摘要:目錄結(jié)構(gòu)書簽歷史管理擴展與應(yīng)用標簽書簽第一步,在中聲明書簽的個屬性,并不是每個書簽都有這個對象,如書簽文件夾就不具有屬性。調(diào)整書簽位置更新書簽刪除書簽和空的書簽分組刪除包含書簽的書簽分組獲取完整的書簽內(nèi)容書簽的事件第一步,先行在中聲明。 目錄結(jié)構(gòu) 4.1 書簽 4.2 Cookies 4.3 歷史 4.4 管理擴展與應(yīng)用 4.5 標簽 4.6 overridePages 4.1 書...

    jackwang 評論0 收藏0
  • 雙刃劍MongoDB學(xué)習(xí)和避坑

    摘要:雙刃劍的學(xué)習(xí)和避坑是一把雙刃劍,它對數(shù)據(jù)結(jié)構(gòu)的要求并不高。第二某些銀行顯示的金額不是實時的。第三步創(chuàng)建封裝類的管理類,針對不同的實體類,需要配置不同的。 雙刃劍MongoDB的學(xué)習(xí)和避坑 MongoDB 是一把雙刃劍,它對數(shù)據(jù)結(jié)構(gòu)的要求并不高。數(shù)據(jù)通過key-value的形式存儲,而value的值可以是字符串,也可以是文檔。所以我們在使用的過程中非常方便。正是這種方便給我們埋下了一顆顆...

    everfight 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<