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

    通過前面的學習認知,我們瞭解瞭如何創建數據庫連接,如果使用指令進行CRUD操作,以及如何定義集合Collection。本章我們繼續學習數據庫的投影操作Projection.

    通常情況下,在MongoDB數據庫中進行查詢操作會返回所有的匹配文檔。爲了限制MongoDB返回給應用的數據大小,我們可以在查詢操作中包含投影文檔。

  1. 投影文檔

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

   {'projection':{field1:<value>,field2:<value>...}}。value字段的取值爲0 或者false時,表示要在返回結果中去除該字段;如果value字段取值爲1或者true,表示在返回結果中需要包含這個字段。除了特殊的_id字段,我們不可以在統一文檔中既有包含參數inclusions又有去除參數exclusions,也就是projection中要麼出現的全是要包含的字段,要麼出現的全是要去除的字段,但是_id字段設置除外。

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

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

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

1.2 代碼實例

   下面的代碼實例使用companies樣本數據

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

    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

   爲了實現只返回name和location字段,排除包含_id在內的其他字段,使用下面的形式,明確指出需要排除_id字段。

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

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

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

    

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章