返すフィールドを指定する
Overview
このガイドでは、読み取り操作からドキュメントで返されるフィールドを指定する方法を学習できます。
サンプル データ
このガイドの例を実行するには、次のスニペットを使用して、これらのドキュメントを tea.ratings
コレクションにロードします。
coll := client.Database("tea").Collection("ratings") docs := []interface{}{ bson.D{{"type", "Masala"}, {"rating", 10}}, bson.D{{"type", "Assam"}, {"rating", 5}}, bson.D{{"type", "Oolong"}, {"rating", 7}}, bson.D{{"type", "Earl Grey"}, {"rating", 8}}, bson.D{{"type", "English Breakfast"}, {"rating", 5}}, } result, err := coll.InsertMany(context.TODO(), docs) if err != nil { panic(err) } fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))
Tip
存在しないデータベースとコレクション
書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。
各ドキュメントには、 フィールドとtype
rating
フィールドに対応するお茶の種類の評価が含まれています。
注意
各例ではObjectID
値が切り捨てられます。この値はドライバーが個別に生成するためです。
プロジェクション
プロジェクションは、一致したドキュメントで返されるフィールドを指定します。 フィールド名とそれに続く1
(含める場合)、または0
(除外する場合)が含まれます。 プロジェクションには、フィールドを含めるか除外するフィールドのみが含まれます。
次の読み取り操作メソッドのオプションで、 SetProjection()
メソッドに 1 つを渡すことでプロジェクションを指定できます。
Find()
FindOne()
FindOneAndDelete()
FindOneAndReplace()
FindOneAndUpdate()
Tip
プロジェクションを指定しない場合、読み取り操作は一致したドキュメント内のすべてのフィールドを返します。
フィールドを除外する
フィールドを除外するには、除外するフィールドと0
をSetProjection()
メソッドに渡します。 プロジェクションで明示的にリストしないすべてのフィールドには、ドライバーはそれらを含めます。
例
次の例えではFind()
メソッドの一致したドキュメントからrating
を除外します。
opts := options.Find().SetProjection(bson.D{{"rating", 0}}) cursor, err := coll.Find(context.TODO(), bson.D{}, opts) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
フィールドを含める
フィールドを含めるには、含めるフィールドと1
をSetProjection()
メソッドに渡します。 プロジェクションで明示的にリストしないすべてのフィールドについて、ドライバーはそれらを除外します。
重要
特定のフィールドを含めるように指定した場合でも、 _id
フィールドを除外することができます。 デフォルトでは、ドライバーには_id
フィールドが含まれています。 返されない場合は、 _id
フィールドを明示的に除外する必要があります。
例
次の例では、 Find()
メソッドから一致したドキュメントに対して次のプロジェクションを実行します。
type
とrating
フィールドを含める_id
フィールドを除外する
opts := options.Find().SetProjection(bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}}) cursor, err := coll.Find(context.TODO(), bson.D{}, opts) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
集計
また、集計パイプラインでプロジェクションを指定するには、 $projectステージを含めます。
例
次の例では、 Aggregate()
メソッドから一致したドキュメントに対して次のプロジェクションを実行します。
type
とrating
フィールドを含める_id
フィールドを除外する
projectStage := bson.D{{"$project", bson.D{{"type", 1}, {"rating", 1}, {"_id", 0}}}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{projectStage}) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
詳細情報
上記で説明されている操作の詳細については、次のガイドを参照してください。
テキスト検索からテキスト スコアを予測する方法については、「テキストを検索する」を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。