返すフィールドを指定する
Overview
このガイドでは、ドキュメントで返されるフィールドを指定する方法を学習できます。
サンプル データ
このガイドの例では、 courses
コレクション内のドキュメントのモデルとして、次の Course
構造体を使用します。
type Course struct { Title string `bson:"title,omitempty"` CourseId string `bson:"course_id,omitempty"` Enrollment int32 `bson:"enrollment,omitempty"` }
omitempty
struct タグは、プロジェクション仕様に基づいてアンマーシャリング時にフィールドを除外するようにドライバーに指示します。
このガイドの例を実行するには、次のスニペットを使用してサンプルデータをdb.courses
コレクションにロードします。
coll := client.Database("db").Collection("courses") docs := []interface{}{ Course{Title: "Primate Behavior", CourseId: "PSY2030", Enrollment: 40}, Course{Title: "Revolution and Reform", CourseId: "HIST3080", Enrollment: 12}, } result, err := coll.InsertMany(context.TODO(), docs)
Tip
存在しないデータベースとコレクション
書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。
各ドキュメントには、各ドキュメントの title
、course_id
、enrollment
フィールドに対応する、コース名、コース ID、最大登録者数を含む大学コースの説明が含まれています。
プロジェクション
プロジェクションは、一致したドキュメントで返されるフィールドを指定します。プロジェクション ドキュメントには、対応するフィールドを含める場合は 1
、除外する場合は 0
が付いたフィールド名が含まれています。集計フレームワークを使用している場合は、新しく計算されたフィールドを含めるようにプロジェクションを指定することもできます。
プロジェクション ドキュメントを SetProjection()
メソッドに渡すことでプロジェクションを指定できます。次の操作は、オプション オブジェクトをパラメーターとして受け取ります。
Find()
FindOne()
FindOneAndDelete()
FindOneAndReplace()
FindOneAndUpdate()
Tip
プロジェクションを指定しない場合、操作は一致したドキュメント内のすべてのフィールドを返します。
フィールドを除外する
フィールドを除外するには、除外するフィールドを 0
とともに SetProjection()
メソッドに渡します。除外するフィールドを指定した場合、ドライバーはプロジェクション ドキュメントで明示的に除外されていないすべてのフィールドを含めます。
例
次の例では、Find()
メソッドによって返される一致したドキュメントから course_id
フィールドと enrollment
フィールドを除外します。
filter := bson.D{} opts := options.Find().SetProjection(bson.D{{"course_id", 0}, {"enrollment", 0}}) cursor, err := coll.Find(context.TODO(), filter, opts) if err != nil { panic(err) } var results []Course if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { res, _ := bson.MarshalExtJSON(result, false, false) fmt.Println(string(res)) }
{"title":"Primate Behavior"} {"title":"Revolution and Reform"}
フィールドを含める
フィールドを含めるには、含めるフィールドを 1
とともに SetProjection()
メソッドに渡します。含めるフィールドを指定した場合、ドライバーはプロジェクション ドキュメントに明示的に含まれていないすべてのフィールドを除外します。
例
次の例には、Find()
メソッドによって返された一致したドキュメントの title
フィールドと enrollment
フィールドのみが含まれます。
filter := bson.D{} opts := options.Find().SetProjection(bson.D{{"title", 1}, {"enrollment", 1}}) cursor, err := coll.Find(context.TODO(), filter, opts) if err != nil { panic(err) } var results []Course if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { res, _ := bson.MarshalExtJSON(result, false, false) fmt.Println(string(res)) }
{"title":"Primate Behavior","enrollment":40} {"title":"Revolution and Reform","enrollment":12}
集計
また、集計パイプラインでプロジェクションを指定するために、 $projectステージを作成できます。
例
次の例には、Aggregate()
メソッドによって返された一致したドキュメントの title
フィールドと course_id
フィールドのみが含まれます。
projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"course_id", 1}}}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{projectStage}) if err != nil { panic(err) } var results []Course if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { res, _ := bson.MarshalExtJSON(result, false, false) fmt.Println(string(res)) }
{"title":"Primate Behavior","course_id":"PSY2030"} {"title":"Revolution and Reform","course_id":"HIST3080"}
詳細情報
上記で説明されている操作の詳細については、次のガイドを参照してください。
テキスト検索からテキスト スコアを予測する方法については、「テキストを検索する」を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。