概要
MongoDBでもRDBのSELECT分同様に、特定のフィールドのみ取得する機能が用意されています。How to select fields in a document in MongoDBの記事にある通り、findメソッドの引数で取得するフィールド名を指定します。
今回はこの操作をmongo-go-driverでどのように実装すれば良いかというのを書きます。
対応
remove a field from mongodb query result in golangの記事にある通り、options.FindOne().SetProjection
のメソッド(複数行取得の場合はFind()
)に取得フィールドを指定します。指定した内容をFindOneメソッド(複数行取得の場合はFind)に設定します。
実装サンプル
上記記事のほぼコピペですが、コレクションからname
とemail
のみを抽出するサンプルを記載します。なお、コレクション取得までの接続処理は割愛します。接続処理についてはこちらのドキュメントを参考ください。
sample.go
// コレクション取得までの接続処理は割愛・・
var result bson.M
// filter条件の設定
filter := bson.D{{Key: "_id", Value: ID}}
// 取得するフィールドを絞ってクエリ発行
err := col.FindOne(context.Background(), filter, options.FindOne().SetProjection({
bson.M{
"name": 1,
"email": 1,
},
)).Decode(&result)