1. 程式人生 > >Ruby操作MongoDB(進階四)-投影Projection

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}}