72183


RubyでMongoDBの特定のフィールド(カラム)のみを取得したいのですが、全てのフィールドが取得されてしまい、理想通りの結果が得られません。

findメソッドの指定の仕方はリファレンス通りですが、取り出し方が悪いのでしょうか？  
ご教授いだたけると幸いです。

MongoDBバージョン 4.4.1

理想の結果

[code]

    {title: '記事のタイトル'}
    
[/code]

実際の結果

[code]

    {"_id"=>BSON::ObjectId('xxx'), title: '記事のタイトル', content: '記事の中身' }
    
[/code]

メソッド

[code]

    db = Mongo::Client.new([ 'mongodb' ], client_data)
    collection = db[:post].find({}, { title: 1 })
    # collection = db[:post].find({}, { _id: 0, title: 1, content: 0 }) # 全てのフィールドに0・1を指定しても同様の結果
    collection.each do |val|
        p val
    end
    
[/code]


CC BY-SA 4.0
2020-11-24T03:59:27.503
72173
2020-11-24T15:27:35.043
2020-11-24T05:13:08.797
3060
25223
question
ruby mongodb
Ruby で MongoDB から特定のフィールドのみを取得したい


`find({}, {title: 1})`はmongoコマンドでの書き方ですね。

[Ruby用ドライバの説明](https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-
driver-projections/)を見ると、  
`find({}, {'projection'=>{'title'=>1}})` と書けば良さそうです。

ただし上のようにすると`title`だけでなく`_id`も返されます。  
`_id`フィールドは指定に含めなくても返され、含まないようにするには除外指定が必要です。  
つまり`_id`も除外して`title`だけを得るには  
`find({}, {'projection'=>{'title'=>1, '_id'=>0}})`  
とすることになります。


CC BY-SA 4.0
2020-11-24T15:17:11.120
72183
2020-11-24T15:27:35.043
2020-11-24T15:27:35.043
9464
9464
72173
answer