วิธีเชื่อมต่อ MongoDB กับ Golang

Withi Cheuxm Tx Mongodb Kab Golang



เช่นเดียวกับภาษา C ภาษา Golang ยังเป็นภาษาโอเพ่นซอร์สที่สามารถดำเนินการกับเครื่องมือมากมายบนระบบ Windows และ Linux/Unix เพื่อสร้างบันทึก เช่นเดียวกับ C++ และ Java เราสามารถเชื่อมต่อระหว่างระบบไคลเอนต์ MongoDB กับภาษา Go โดยใช้เครื่องมือ golang ในการทำเช่นนี้ เราจะดำเนินการตามขั้นตอนที่สำคัญและจำเป็นหลายขั้นตอนใน Ubuntu 22.04 โดยใช้เครื่องมือรหัส Visual Studio สำหรับโปรแกรม ก่อนที่จะทำการเชื่อมต่อกับ MongoDB compass เรามักจะติดตั้ง MongoDB และ Visual Studio Code พร้อมกับ “go” และส่วนขยายที่จำเป็นในคำแนะนำเพื่อช่วยเหลือคุณในภาษา Go

ติดตั้ง MongoDB

เราได้ดาวน์โหลดแพ็คเกจ 'deb' ของเซิร์ฟเวอร์ MongoDB จากเว็บไซต์อย่างเป็นทางการ แพ็คเกจ 'Deb' สามารถเรียกใช้งานได้ใน Ubuntu โดยใช้เครื่องมือคำสั่ง 'dpkg' บน Terminal







เรียกใช้ไฟล์เซิร์ฟเวอร์ MongoDB บนเทอร์มินัลด้วยสิทธิ์ 'sudo' และระบุรหัสผ่าน



saeedraza@virtualbox:~$ ซูโด dpkg -ผม mongodb-org-server_6.0.3_amd64.deb


หากคุณพบว่าบริการ MongoDB ไม่ทำงานหลังจากลองใช้คำสั่ง “systemctl” ของ Ubuntu เพื่อตรวจสอบสถานะ คุณสามารถอัปเดตได้เช่นกัน ในการเปิดใช้งาน MongoDB ให้ลองใช้คำสั่ง systemctl ด้วยคีย์เวิร์ด “start” และ “enable”

saeedraza@virtualbox:~$ ซูโด systemctl เริ่ม mongod
saeedraza@virtualbox:~$ ซูโด systemctl เปิดใช้งาน มองโกด
saeedraza@virtualbox:~$ ซูโด mongod สถานะ systemctl

เปิดตัว MongoDB

หลังจากการติดตั้ง ให้เปิดเชลล์ MongoDb อย่างรวดเร็วโดยใช้แบบสอบถาม “mongo” เปลี่ยนไปใช้ฐานข้อมูล 'ผู้ดูแลระบบ' เพื่อดำเนินการตามขั้นตอน

saeedraza@virtualbox:~$ มองโก
MongoDB เชลล์เวอร์ชัน v5.0.14
เชื่อมต่อกับ: mongodb: // 127.0.0.1: 27017 / ? คอมเพรสเซอร์ =ปิดการใช้งาน & gssapiServiceName =mongodb
เซสชันโดยนัย: เซสชัน { 'รหัส' : UUID ( '34cc8e0f-b6b0-4191-adea-676411f66cf5' ) }
เวอร์ชันเซิร์ฟเวอร์ MongoDB: 6.0.3


เรากำลังสร้างผู้ใช้ใหม่ที่มีสิทธิ์ของผู้ดูแลระบบโดยใช้ฟังก์ชัน createUser()

> ใช้ผู้ดูแลระบบ
เปลี่ยนเป็นผู้ดูแลระบบ db
> db.createUser (
... {
... ผู้ใช้: 'อีด' ,
... pwd: '12345' ,
... บทบาท: [ { บทบาท: 'userAdminAnyDatabase' ฐานข้อมูล: 'ผู้ดูแลระบบ' } , 'readWriteAnyDatabase' ]

... } )
เพิ่มผู้ใช้สำเร็จแล้ว: {
'ผู้ใช้' : 'อีด' ,
'บทบาท' : [
{
'บทบาท' : 'userAdminAnyDatabase' ,
'ฐานข้อมูล' : 'ผู้ดูแลระบบ'
} ,
'readWriteAnyDatabase'
]
}


ให้สิทธิ์ผู้ใช้ “Saeed” โดยใช้ข้อมูลรับรองในฟังก์ชัน “auth” และแสดงฐานข้อมูล MongoDB ที่เป็นเจ้าของในปัจจุบัน

> db.auth ( 'สะอีด' , '12345' )
หนึ่ง
> แสดงฐานข้อมูล
ผู้ดูแลระบบ   0.000GB
กำหนดค่า 0.000GB
ท้องถิ่น 0.000GB

ติดตั้งไดรเวอร์ MongoDB สำหรับ Golang

เปิดเทอร์มินัลใน Visual Studio Code และย้ายภายในโฟลเดอร์ “Golang” ที่คุณต้องการเพิ่มไฟล์ซอร์สโค้ดของคุณ เรียกใช้คำสั่ง 'go mod init' ด้วยชื่อโฟลเดอร์เพื่อสร้างไฟล์ 'go.mod' โหลดไดรเวอร์ MongoDB สำหรับภาษา Go ผ่านแบบสอบถาม “go get”

saeedraza@virtualbox:~/Golang$ ไป mod เริ่มต้น Golang


ในบางกรณี จำเป็นต้องโหลดไดรเวอร์ MongoDB รูปแบบ bson สำหรับ Golang ด้วย

saeedraza@virtualbox:~/Golang$ ไปรับ go.mongodb.org / mongo-ไดรเวอร์ / เบส


ตรวจสอบให้แน่ใจว่าได้เพิ่มแพ็คเกจส่วนขยายที่จำเป็นเช่น 'gopls' ในรหัส Visual Studio โดยใช้แผงส่วนขยายโดยไม่ต้องใช้คำแนะนำใดๆ


นอกเหนือจาก 'gopls' แล้ว Golang อาจต้องติดตั้งเครื่องมือ 'dlv' อย่างแน่นอน

ตัวอย่างรหัสไป

ไฟล์รหัส 'main.go' เริ่มต้นขึ้นด้วยการนำเข้าแพ็คเกจที่มีประโยชน์บางอย่างที่จะใช้ในรหัสทั้งหมดสำหรับการเชื่อมต่อ มีการนำเข้าทั้งหมด 7 รายการที่นี่ หลังจากอิมพอร์ตแพ็กเกจ เราสร้างโครงสร้างใหม่ชื่อ MongoField โดยมีสมาชิกข้อมูลประเภท JSON 4 ตัวอยู่ในนั้น 2 สมาชิกของข้อมูลเหล่านี้เป็นสตริง และ 2 ในนั้นเป็นจำนวนเต็ม

หลังจากนี้ จะมีการประกาศตัวแปรประเภทคงที่ “uri” ด้วยที่อยู่ไคลเอนต์ หรือคุณต้องเพิ่มที่อยู่โลคัลโฮสต์ของคุณในนั้นตามชื่อผู้ใช้และรหัสผ่าน ฟังก์ชัน main() เริ่มต้นด้วยการใช้ฟังก์ชัน connect() ของ Golang เพื่อเชื่อมต่อกับ MongoDB ผ่านวัตถุ 'mongo' ฟังก์ชัน ApplyURI() จะใช้ตัวแปร 'uri' เป็นอาร์กิวเมนต์เพื่อใช้กับฟังก์ชัน Client() เพื่อให้สามารถสร้างการเชื่อมต่อผ่านที่อยู่โฮสต์ได้ แพ็คเกจบริบทมีบทบาทหลักในการเรียกใช้ฟังก์ชัน TODO() เพื่อขอการเชื่อมต่อ หากสร้างการเชื่อมต่อระหว่างโค้ด Visual Studio และ MongoDB ได้สำเร็จ สัญญาณที่ไคลเอนต์ส่งคืนจะถูกเพิ่มในตัวแปร 'ไคลเอนต์' มิฉะนั้นข้อผิดพลาดจะถูกเก็บไว้ในตัวแปร “err”

คำสั่ง 'if' อยู่ที่นี่เพื่อแสดงข้อความตามนั้น หากตัวแปร “err” มีค่าอื่นที่ไม่ใช่ “nil” ฟังก์ชัน Println() จากแพ็คเกจรูปแบบ “fmt” จะพิมพ์ข้อผิดพลาดนั้นบนหน้าจอเอาต์พุตซึ่งเป็นเทอร์มินัล แพ็คเกจ 'os' จะถูกใช้เพื่อออกจากโปรแกรมหากเกิดข้อผิดพลาด แพคเกจบริบทถูกนำมาใช้อีกครั้งที่นี่เพื่อจัดการการหมดเวลาสำหรับการเชื่อมต่อที่จะสร้างผ่านโปรแกรมนี้ สำหรับค่าการหมดเวลาเฉพาะ “ctx” โปรแกรมของเราจะดำเนินการ คอลเลกชันใหม่ 'บุคคล' พร้อมกับฐานข้อมูลใหม่ 'ใหม่' จะถูกสร้างขึ้นในไคลเอนต์ MongoDB ผ่าน Golang Println() จะแสดงประเภทของคอลเลกชัน 'c' โดยใช้ฟังก์ชัน 'TypeOf' จากแพ็คเกจสะท้อน

บันทึก 'Rec' ถูกสร้างขึ้นโดยใช้โครงสร้างข้อมูลสมาชิก MongoField ซึ่งเริ่มต้นที่นี่ทีละรายการ มีการแสดงประเภทเรคคอร์ดและเรคคอร์ด “Rec” จะถูกแทรกลงในไคลเอ็นต์ MongoDB โดยใช้ฟังก์ชัน insertOne กับคอลเลกชั่นอ็อบเจกต์ “c” การแทรกที่สำเร็จจะนำไปสู่ตัวแปร 'ผลลัพธ์' ที่เก็บค่าความสำเร็จในขณะที่ตัวแปร 'insertErr' จะเก็บค่าความล้มเหลว คำสั่ง 'if' จะใช้อีกครั้งเพื่อตรวจสอบและแสดงข้อผิดพลาดในการแทรกเรกคอร์ดเฉพาะในกรณีที่ตัวแปร 'insertErr' มีค่าอื่นที่ไม่ใช่ค่า 'nil' มิฉะนั้น ส่วน “else” ของคำสั่งจะมีคำสั่ง Println() เพื่อแสดงประเภทของบันทึกที่จะแทรก รหัสบันทึก และข้อความแสดงความสำเร็จสำหรับการเชื่อมต่อและการแทรกที่เกิดขึ้น รหัส Golang เสร็จสมบูรณ์แล้ว

แพคเกจหลัก
นำเข้า (
'บริบท'
'เอฟเอ็มที'
'คุณ'
'สะท้อน'
'เวลา'
'go.mongodb.org/mongo-driver/mongo'
'go.mongodb.org/mongo-driver/mongo/options'
)
พิมพ์ โครงสร้าง MongoField {
ชื่อ   สตริง ` เจสัน: 'ฟิลด์สตริ' `
สตริงอีเมล ` เจสัน: 'ฟิลด์สตริ' `
อายุ    int ` เจสัน: 'ฟิลด์อินท์' `
เงินเดือน ` เจสัน: 'ฟิลด์อินท์' `
}
const uri = 'mongodb: // ผู้ใช้: รหัสผ่าน @ โลคัลโฮสต์: 27017 / ? maxPoolSize = ยี่สิบ & ใน = เสียงข้างมาก”
ฟังก์ชั่นหลัก ( ) {
ลูกค้า ข้อผิดพลาด := mongo.Connect ( บริบททั้งหมด ( ) ,ตัวเลือก.ลูกค้า ( ) .ApplyURI ( พิมพ์ ) )
ถ้า ผิดพลาด ! = ไม่มี {
fmt.Println ( ข้อผิดพลาด 'Mongo.connect(): ' ผิดพลาด )
os. ออก ( หนึ่ง )
}
ctx, _ := บริบท WithTimeout ( บริบทพื้นหลัง ( ) , สิบห้า * เวลาวินาที )
c:= client.Database ( 'ใหม่' ) .ของสะสม ( 'บุคคล' )
fmt.Println ( 'ประเภทการสะสม: ' , สะท้อน. TypeOf ( ) , ' \n ' )
Rec:= MongoField {
ชื่อ: 'อีเดน' ,
อีเมล: 'eden@gmail.com' ,
อายุ: สี่ห้า ,
เงินเดือน: 50000 }
fmt.Println ( 'ประเภทบันทึก: ' , สะท้อน. TypeOf ( บันทึก ) , ' \n ' )
ผลลัพธ์ insertErr := c.InsertOne ( ctx, Rec )
ถ้า แทรกข้อผิดพลาด ! = ไม่มี {
fmt.Println ( 'ข้อผิดพลาดแทรกหนึ่ง: ' , แทรกข้อผิดพลาด )
os. ออก ( หนึ่ง )
} อื่น {
fmt.Println ( 'ประเภทผลลัพธ์ของ InsertOne: ' , สะท้อน. TypeOf ( ผลลัพธ์ ) )
newID = result.InsertedID
fmt.Println ( ' ID บันทึกที่แทรก: ' รหัสใหม่ ) )
fmt.Println ( 'เชื่อมต่อและแทรกบันทึกสำเร็จแล้ว!' )
} }


บันทึกรหัส Golang และเปิดเทอร์มินัลภายในโฟลเดอร์ Golang ตอนนี้ ใช้คำสั่ง 'go' กับคีย์เวิร์ด 'run' เพื่อรันไฟล์โค้ด 'main.go' การดีบักสำเร็จและสร้างคอลเล็กชัน 'บุคคล' ใน MongoDB สำเร็จแล้ว เอาต์พุตจะแสดงประเภทคอลเลกชัน ประเภทเรคคอร์ด ประเภทผลลัพธ์ และ “ID” ของเรคคอร์ด

ซาอีดราซา @ กล่องเสมือน:~ / Golang$ โกรัน Main.go
ประเภทคอลเลกชัน: * mongo.Collection
ประเภทเรคคอร์ด: main.MongoField
ประเภทผลลัพธ์ของ InsertOne: * mongo.InsertOneResult
รหัสบันทึกที่แทรก: ObjectID ( “63a8535ac97b4218230664b6” )
เชื่อมต่อและแทรกเร็กคอร์ดสำเร็จแล้ว


เปิดเข็มทิศ “MongoDB” ที่ส่วนท้ายของคุณและเชื่อมต่อกับโลคัลโฮสต์โดยใช้ “URI”


หลังจากย้ายภายในฐานข้อมูล 'ใหม่' เรามีคอลเลกชัน 'บุคคล' แสดงในส่วน 'เอกสาร' พร้อมกับบันทึกที่เราเพิ่มเข้าไป

บทสรุป

คู่มือนี้แสดงการใช้ภาษา Go เพื่อเพิ่มระเบียนในไคลเอนต์ MongoDB โดยใช้เครื่องมือ Visual Studio Code ในระบบ Linux สำหรับสิ่งนี้ เราได้ติดตั้ง mongodb พร้อมกับไดรเวอร์ mongodb สำหรับ “golang” ในระบบ ด้วยการใช้ภาษา Golang เราได้สร้างไฟล์ “go” ใน MongoDB และพูดคุยเกี่ยวกับแพ็คเกจและฟังก์ชั่นที่หลากหลายของ Golang เพื่อสร้างการเชื่อมต่อกับ MongoDB และแทรกบันทึก ในตอนท้าย เราได้แสดงผลลัพธ์บนเข็มทิศ MongoDB ซึ่งแสดงว่าคุณสามารถเชื่อมต่อเครื่องมือ Golang กับ MongoDB ได้