Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang query mongo

golang query mongo

王林
王林asal
2023-05-21 20:31:05994semak imbas

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"]
}

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

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)
        }
    }()
}

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)
}

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)
}

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)
}

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)
}

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)
}

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)
}

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)
}

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:
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
Artikel sebelumnya:golang ke jawaArtikel seterusnya:golang ke jawa