golang query mongo

May 21, 2023 pm 08:31 PM

Golang ialah bahasa pengaturcaraan yang pantas, ringkas, selamat dan cekap yang telah mendapat perhatian dan aplikasi yang meluas. MongoDB ialah pangkalan data berasaskan dokumen tanpa skema dan merupakan salah satu pangkalan data pilihan untuk aplikasi moden. Gabungan Golang dan MongoDB boleh membawa banyak faedah kepada pembangun. Dalam artikel ini, kami akan meneroka cara menggunakan Golang untuk menanyakan MongoDB.

Pertama, kita perlu memahami beberapa pengetahuan asas MongoDB. Kaedah penyimpanan data MongoDB ialah dokumen, dan dokumen ialah koleksi pasangan nilai kunci. Berikut ialah contoh dokumen:

{
   "_id": ObjectId("507f1f77bcf86cd799439011"),
   "name": "John",
   "age": 25,
   "city": "New York",
   "phone": {
       "office": "123-456-7890",
       "home": "987-654-3210"
   },
   "email": "john@example.com",
   "interests": ["swimming", "reading", "traveling"]
}
Salin selepas log masuk

Dokumen tersebut mempunyai pengecam unik "_id" dan pasangan nilai kunci yang lain. Nilai boleh menjadi jenis mudah, seperti rentetan, nilai angka, nilai Boolean, dsb., atau jenis data kompleks, seperti tatasusunan, dokumen bersarang, dsb. Untuk maklumat lanjut tentang MongoDB, lihat dokumentasi rasmi MongoDB.

Seterusnya, kita akan belajar cara menggunakan Golang untuk menanyakan MongoDB. Kami akan menggunakan pemandu rasmi MongoDB Go (mongo-go-driver) untuk contoh kami. Pemacu ini menyediakan set alat yang kaya dengan ciri untuk berinteraksi dengan MongoDB dengan mudah.

Pertama, kita perlu memasang mongo-go-driver:

go get go.mongodb.org/mongo-driver/mongo
Salin selepas log masuk

Kemudian, kita boleh menggunakan kod berikut untuk mewujudkan sambungan ke MongoDB:

package main

import (
    "context"
    "fmt"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {
    // 设置客户端选项
    clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")

    // 连接到MongoDB
    client, err := mongo.Connect(context.Background(), clientOptions)
    if err != nil {
        fmt.Println("连接到MongoDB时出错:", err)
    }

    // 断开与MongoDB的连接
    defer func() {
        if err = client.Disconnect(context.Background()); err != nil {
            panic(err)
        }
    }()
}
Salin selepas log masuk

Dalam perkara di atas code , kami mula-mula membuat pilihan pelanggan menggunakan kaedah options.Client(). Di sini kami tentukan untuk menyambung ke perkhidmatan MongoDB tempatan, portnya ialah 27017. Kemudian, kami menggunakan kaedah mongo.Connect() untuk menyambung ke MongoDB dan menyemak ralat. Akhir sekali, kami menggunakan kaedah client.Disconnect() untuk memutuskan sambungan daripada MongoDB.

Sekarang kami telah mewujudkan sambungan ke MongoDB, kami akan melihat beberapa operasi pertanyaan biasa.

1. Cari semua dokumen

Kita boleh menggunakan kaedah Collection.Find() untuk mencari semua dokumen yang sepadan dengan syarat yang diberikan. Berikut ialah contoh:

collection := client.Database("myDatabase").Collection("myCollection")
cursor, err := collection.Find(context.Background(), bson.D{})
if err != nil {
    fmt.Println("查询文档时出错:", err)
}
defer cursor.Close(context.Background())

for cursor.Next(context.Background()) {
    var doc bson.M
    if err := cursor.Decode(&doc); err != nil {
        fmt.Println("解码文档时出错:", err)
    }
    fmt.Println(doc)
}

if err := cursor.Err(); err != nil {
    fmt.Println("游标错误:", err)
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula mendapatkan objek koleksi (Collection) dan menggunakan kaedah Find() untuk mencari dan mengembalikan kursor semua dokumen. Jika ralat berlaku, maklumat ralat akan dikeluarkan kepada konsol. Kami kemudian menyahkod setiap dokumen menggunakan kaedah Decode() kursor dan mencetaknya ke konsol.

2. Hadkan bilangan dokumen yang dikembalikan

Kita boleh menggunakan fungsi Find() kaedah Limit() untuk mengehadkan bilangan dokumen yang dikembalikan. Berikut ialah contoh:

cursor, err := collection.Find(context.Background(), bson.D{}, options.Find().SetLimit(2))
if err != nil {
    fmt.Println("查询文档时出错:", err)
}
Salin selepas log masuk

Di sini kami menyatakan bahawa hanya dua dokumen akan dikembalikan. Anda boleh menukar nombor ini mengikut keperluan.

3. Kembalikan hanya medan yang ditentukan

Kita boleh menggunakan fungsi Find() kaedah Project() untuk mengembalikan medan yang ditentukan sahaja. Berikut ialah contoh:

cursor, err := collection.Find(context.Background(), bson.D{}, options.Find().SetProjection(bson.D{{"name", 1}, {"age", 1}}))
if err != nil {
    fmt.Println("查询文档时出错:", err)
}
Salin selepas log masuk

Di sini kami menyatakan bahawa hanya medan "nama" dan "umur" dikembalikan.

4. Pertanyaan mengikut syarat tertentu

Kita boleh menggunakan fungsi Find() kaedah Filter() untuk membuat pertanyaan mengikut syarat tertentu. Berikut ialah contoh:

cursor, err := collection.Find(context.Background(), bson.D{{"age", bson.D{{"$gt", 20}}}})
if err != nil {
    fmt.Println("查询文档时出错:", err)
}
Salin selepas log masuk

Di sini kami tentukan untuk mencari semua dokumen dengan "umur" melebihi 20 tahun.

5. Gunakan ungkapan biasa

Kita boleh menggunakan nilai jenis bson.RegEx untuk melakukan pertanyaan kabur menggunakan ungkapan biasa. Berikut ialah contoh:

cursor, err := collection.Find(context.Background(), bson.D{{"name", bson.Regex{Pattern: "jo", Options: ""}}})
if err != nil {
    fmt.Println("查询文档时出错:", err)
}
Salin selepas log masuk

Di sini kami tentukan untuk mencari semua dokumen yang mengandungi "jo" dalam medan "nama".

6. Isih hasil pertanyaan

Kita boleh menggunakan fungsi Find() kaedah Sort() untuk mengisih hasil pertanyaan mengikut syarat tertentu. Berikut ialah contoh:

cursor, err := collection.Find(context.Background(), bson.D{}, options.Find().SetSort(bson.D{{"age", 1}}))
if err != nil {
    fmt.Println("查询文档时出错:", err)
}
Salin selepas log masuk

Di sini kami menyatakan bahawa hasil pertanyaan diisih mengikut medan "umur" dalam tertib menaik (1).

7. Gunakan saluran paip pengagregatan

Untuk pertanyaan yang lebih kompleks, kami boleh menggunakan rangka kerja pengagregatan MongoDB. Berikut ialah contoh yang mengandungi saluran paip pengagregatan:

pipeline := bson.A{
    bson.D{{"$match", bson.D{{"age", bson.D{{"$gt", 20}}}}}},
    bson.D{{"$group", bson.D{{"_id", "$city"}, {"count", bson.D{{"$sum", 1}}}}}},
    bson.D{{"$sort", bson.D{{"count", -1}}}},
}

cursor, err := collection.Aggregate(context.Background(), pipeline)
if err != nil {
    fmt.Println("聚合查询时出错:", err)
}
Salin selepas log masuk

Di sini kami menentukan saluran paip pengagregatan menggunakan jenis bson.A, yang terdiri daripada tiga peringkat: $matchpadanan, $grouppengumpulan dan $sort menyusun. Saluran paip akan menemui semua dokumen yang age lebih besar daripada 20, kumpulkan mengikut bandar dan mengira bilangan dokumen untuk setiap kumpulan. Akhir sekali, keputusan diisih mengikut tertib menurun bagi kiraan dokumen.

Mahir dalam operasi pertanyaan MongoDBGolang ini boleh membolehkan pembangun memproses data dalam MongoDB dengan lebih berkesan dan meningkatkan kecekapan pembangunan. Pada masa yang sama, anda juga boleh menggunakan fungsi MongoDB lain, termasuk pengindeksan, pengemaskinian, pemadaman, dsb.

Atas ialah kandungan terperinci golang query mongo. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Mar 21, 2025 pm 06:37 PM

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Bagaimana anda menulis ujian unit di GO? Bagaimana anda menulis ujian unit di GO? Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Bagaimana anda menentukan kebergantungan dalam fail go.mod anda? Bagaimana anda menentukan kebergantungan dalam fail go.mod anda? Mar 27, 2025 pm 07:14 PM

Artikel ini membincangkan menguruskan kebergantungan modul Go melalui Go.Mod, meliputi spesifikasi, kemas kini, dan resolusi konflik. Ia menekankan amalan terbaik seperti versi semantik dan kemas kini biasa.

Kaedah Pemantauan PostgreSQL di bawah Debian Kaedah Pemantauan PostgreSQL di bawah Debian Apr 02, 2025 am 07:27 AM

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

See all articles