Ruby で MongoDB から特定のフィールドのみを取得したい

投稿者: Anonymous

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

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

MongoDBバージョン 4.4.1

理想の結果

{title: '記事のタイトル'}

実際の結果

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

メソッド

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

解決

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

Ruby用ドライバの説明を見ると、
find({}, {'projection'=>{'title'=>1}}) と書けば良さそうです。

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *