Docs Menu
Docs Home
/ / /
Go Driver
/ / /

返すフィールドを指定する

項目一覧

  • Overview
  • サンプル データ
  • プロジェクション
  • フィールドを除外する
  • フィールドを含める
  • 集計
  • 詳細情報
  • API ドキュメント

このガイドでは、ドキュメントで返されるフィールドを指定する方法を学習できます。

このガイドの例では、 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

存在しないデータベースとコレクション

書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。

各ドキュメントには、各ドキュメントの titlecourse_idenrollment フィールドに対応する、コース名、コース 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 ドキュメントを参照してください。

戻る

返される結果の数を制限する