溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Ruby操作MongoDB(進(jìn)階四)-投影Projection

發(fā)布時(shí)間:2020-08-08 21:12:05 來(lái)源:網(wǎng)絡(luò) 閱讀:668 作者:wanght89 欄目:編程語(yǔ)言

    通過(guò)前面的學(xué)習(xí)認(rèn)知,我們了解了如何創(chuàng)建數(shù)據(jù)庫(kù)連接,如果使用指令進(jìn)行CRUD操作,以及如何定義集合Collection。本章我們繼續(xù)學(xué)習(xí)數(shù)據(jù)庫(kù)的投影操作Projection.

    通常情況下,在MongoDB數(shù)據(jù)庫(kù)中進(jìn)行查詢操作會(huì)返回所有的匹配文檔。為了限制MongoDB返回給應(yīng)用的數(shù)據(jù)大小,我們可以在查詢操作中包含投影文檔。

  1. 投影文檔

    投影文檔中限制了所有匹配文檔的返回字段。投影文檔可以設(shè)置返回結(jié)果中需要包含哪些字段需要剔除哪些字段。投影文檔的使用格式如下:

   {'projection':{field1:<value>,field2:<value>...}}。value字段的取值為0 或者false時(shí),表示要在返回結(jié)果中去除該字段;如果value字段取值為1或者true,表示在返回結(jié)果中需要包含這個(gè)字段。除了特殊的_id字段,我們不可以在統(tǒng)一文檔中既有包含參數(shù)inclusions又有去除參數(shù)exclusions,也就是projection中要么出現(xiàn)的全是要包含的字段,要么出現(xiàn)的全是要去除的字段,但是_id字段設(shè)置除外。

下面列舉了上述的同時(shí)出現(xiàn)包含屬性和去除屬性的示例,_id屬性的特殊性也在其中體現(xiàn)。第一種寫法是不允許的,第二種寫法是允許的。

{'projection'=>{'name'=>1,'location'=>0}}   不允許

{'projection'=>{'name'=>1,'_id'=>0}}         允許

1.2 代碼實(shí)例

   下面的代碼實(shí)例使用companies樣本數(shù)據(jù)

    為了返回所有滿足查詢條件的匹配文檔companies中的name,location和_id字段,我們需要明確指出結(jié)果中包含name和loaction,如果沒有明確描述出要去除_id字段,_id字段會(huì)被自動(dòng)包含在返回結(jié)果中。

    client=Mongo::Client.new(['127.0.0.1:27017'],:database=>'test')

    collection=client[:companies]

    collection.find({},{'projection'=>{'name'=>1,'location'>1}}).limit(5).each do |doc|

     p doc

    end

   為了實(shí)現(xiàn)只返回name和location字段,排除包含_id在內(nèi)的其他字段,使用下面的形式,明確指出需要排除_id字段。

    {'projection'=>{'name'=>1,'location'=>1,'_id'=>0}}

   如果想要返回除了location字段的其他所有字段,使用下面的指令

    {'projection'=>{'location'=>0}}

    

   

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI