MongoDB рдЧреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓

UPD: рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ! MongoDB рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рдереЛрдбрд╝реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рд╕рд╛рдордЧреНрд░реА рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдзрд┐рдХрд╛рд░рд┐рдХ mongoDB рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдпрд╣ рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦ рд╕реЗ рдЕрд▓рдЧ рд╣реИ)ред
рдпрд╣рд╛рдБ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:


  • рдореЛрдВрдЧреЛ-рдЧреЛ-рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  • рдореЛрдВрдЧреЛ-рдЧреЛ-рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрдВрдЧреЛрдбреАрдмреА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
  • BSON рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
  • CRUD рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЫрд╡рд┐


рдореВрд▓ рдХреЛрдб рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ MongoDB рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 2.6 рдФрд░ рдЧреЛрд▓рдВрдЧ 1.10 рдпрд╛ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдХрдо рдирд╣реАрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред


рдореЛрдВрдЧреЛ-рдЧреЛ-рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ):


dep ensure -add "go.mongodb.org/mongo-driver/mongo@~1.0.0" 

рдиреАрдВрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде main.go рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:


 package main import ( "context" "fmt" "log" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) // You will be using this Trainer type later in the program type Trainer struct { Name string Age int City string } func main() { // Rest of the code will go here } 

рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╣рдо рдореЛрдВрдЧреЛ-рдЧреЛ-рдбреНрд░рд╛рдЗрд╡рд░, рдХреБрдЫ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЯреНрд░реЗрдирд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


Mongo-go-driver рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ mongoDB рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ


рдЬрдм рд╣рдордиреЗ mongo-go-driver рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд┐рдпрд╛, рддреЛ рд╣рдореЗрдВ mongo.NewClient () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ mongoDB рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдФрд░ рдореЛрдВрдЧреЛрдбрдм рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкрддреЗ рд╡рд╛рд▓реЗ рд▓рд╛рдЗрди рдХрд╛ рддрд░реНрдХ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рд╡рд┐рдХрд▓реНрдк рдХреЛ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ редientOptions рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдареАрдХ-рдареАрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВред
рдкреНрд░рд▓реЗрдЦрди рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИред


рдЪрд▓рд┐рдП рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:


 // Create client client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://127.0.0.1:27017")) if err != nil { log.Fatal(err) } // Create connect err = client.Connect(context.TODO()) if err != nil { log.Fatal(err) } // Check the connection err = client.Ping(context.TODO(), nil) if err != nil { log.Fatal(err) } fmt.Println("Connected to MongoDB!") 

MongoDB рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:


 collection := client.Database("test").Collection("trainers") 

рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдХрдиреЗрдХреНрд╢рди рдХреЛ mongoDB рдХреЗ рд╕рд╛рде рдЦреБрд▓рд╛ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЦреЛрд▓рдирд╛ рдФрд░ рдмрдВрдж рди рдХрд░рдирд╛ рдкрдбрд╝реЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдм рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ () рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:


 err = client.Disconnect(context.TODO()) if err != nil { log.Fatal(err) } fmt.Println("Connection to MongoDB closed.") 

рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред


MongoDB рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХреЛрдб ( go run main.go ) рдЪрд▓рд╛рдПрдВред


BSON рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


MSONoDB рдореЗрдВ JSON рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ BSON рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд┐рд╕рдореЗрдВ JSON рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, BSON рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирдП рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреИрд╕реЗ int , long , date , float рдФрд░ рджрд╢рдорд▓рд╡128 ред


рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдЫрдВрдЯрд╛рдИ рдФрд░ рддреБрд▓рдирд╛ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред Go рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ BSON рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рд╣реИрдВ: D рдкреНрд░рдХрд╛рд░ рдФрд░ RAW рдкреНрд░рдХрд╛рд░ред


рдкрд░рд┐рд╡рд╛рд░ рдбреА рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:


  • D : BSON рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдСрд░реНрдбрд░ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MongoDB рдХрдорд╛рдВрдбред
  • рдПрдо : рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╢рдмреНрджрдХреЛрд╢ (рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА, рдирдХреНрд╢рд╛)ред рдпрд╣ рдбреА рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдЖрджреЗрд╢ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рдПрдХ : BSON рд╕рд░рдгреАред
  • рдИ : рдбреА рдХреЗ рдЕрдВрджрд░ рдПрдХрд▓ рддрддреНрд╡ ред

рдпрд╣рд╛рдВ рдбреА-рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЙрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдРрд▓рд┐рд╕ рдпрд╛ рдмреЙрдм рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ:


рдХрдЪреНрдЪреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдЗрдЯ рдЯреБрдХрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рд▓реБрдХрдЕрдк () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЙ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдПрдХрд▓ рддрддреНрд╡ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред


рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ BSON рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдбреА-рдЯрд╛рдЗрдк рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


CRUD рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡реЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрди рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред


рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рд╕рдореНрдорд┐рд▓рди (рдирд┐рд░реНрдорд╛рдг)


рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирдИ рдЯреНрд░реЗрдирд░ рд╕рдВрд░рдЪрдирд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 ash := Trainer{"Ash", 10, "Pallet Town"} misty := Trainer{"Misty", 10, "Cerulean City"} brock := Trainer{"Brock", 15, "Pewter City"} 

рдХрд┐рд╕реА рдПрдХрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред InsertOne () рд╡рд┐рдзрд┐:


 insertResult, err := collection.InsertOne(context.TODO(), ash) if err != nil { log.Fatal(err) } fmt.Println("Inserted a single document: ", insertResult.InsertedID) 

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ ред InertMany () рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИ:


 trainers := []interface{}{misty, brock} insertManyResult, err := collection.InsertMany(context.TODO(), trainers) if err != nil { log.Fatal(err) } fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs) 

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрджреНрдпрддрди


рд╕рдВрдЧреНрд░рд╣ . UpdateOne () рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдЕрдкрдбреЗрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ bson.D рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 filter := bson.D{{"name", "Ash"}} update := bson.D{ {"$inc", bson.D{ {"age", 1}, }}, } 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдорд┐рд▓реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдРрд╢ рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ 1 рд╕реЗ рдЙрдореНрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред


 updateResult, err := collection.UpdateOne(context.TODO(), filter, update) if err != nil { log.Fatal(err) } fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount) 

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЦреЛрдЬ


рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ рдПрдХрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ редindOne () ред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдПрдХрд▓ рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдЪрд░ рдореЗрдВ рдбреАрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╣рдо рдЙрд╕реА рдлрд╝рд┐рд▓реНрдЯрд░ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


 // create a value into which the result can be decoded var result Trainer err = collection.FindOne(context.TODO(), filter).Decode(&result) if err != nil { log.Fatal(err) } fmt.Printf("Found a single document: %+v\n", result) 

рдХрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд┐рдВрдж () ред


рдпрд╣ рд╡рд┐рдзрд┐ Cursor рд▓реМрдЯрд╛рддреА рд╣реИред Cursor рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдФрд░ рдбреАрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЬрдм рдХрд░реНрд╕рд░ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЛ рдХрд░реНрд╕рд░ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рд╡рд┐рдХрд▓реНрдк рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрд╕рд░ рдХреЛ рдлрд╛рдЗрди-рдЯреНрдпреВрди рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рджреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИред


 // Pass these options to the Find method options := options.Find() options.SetLimit(2) filter := bson.M{} // Here's an array in which you can store the decoded documents var results []*Trainer // Passing nil as the filter matches all documents in the collection cur, err := collection.Find(context.TODO(), filter, options) if err != nil { log.Fatal(err) } // Finding multiple documents returns a cursor // Iterating through the cursor allows us to decode documents one at a time for cur.Next(context.TODO()) { // create a value into which the single document can be decoded var elem Trainer err := cur.Decode(&elem) if err != nil { log.Fatal(err) } results = append(results, &elem) } if err := cur.Err(); err != nil { log.Fatal(err) } // Close the cursor once finished cur.Close(context.TODO()) fmt.Printf("Found multiple documents (array of pointers): %+v\n", results) 

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣рдЯрд╛рдПрдБ


рдЖрдк collection.DeleteOne () рдпрд╛ collection.DeleteMany () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдлрд╝рд┐рд▓реНрдЯрд░ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдирдЖрдИрдПрд▓ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛ред рдЖрдк рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП collection.Drop () рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 filter := bson.M{} deleteResult, err := collection.DeleteMany(context.TODO(), filter) if err != nil { log.Fatal(err) } fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult.DeletedCount) 

рдЖрдЧреЗ рдХреЗ рдХрджрдо


тЖТ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рдХреЛрдб GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ
тЖТ GoDoc рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдбреНрд░рд╛рдЗрд╡рд░ рдкреНрд░рд▓реЗрдЦрди


рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдорд╕реЗ Google рд╕рдореВрд╣ mongo-go-driver рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред
рдХреГрдкрдпрд╛ MongoDB JIRA рдХреЛ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬреЗрдВред
рд╣рдореЗрдВ Go Driver рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/hi433776/


All Articles