Home>Article>Backend Development> golang mongodb query

golang mongodb query

WBOY
WBOY Original
2023-05-06 13:02:07 944browse

In recent years, the usage rate of Golang has become higher and higher, especially in big data scenarios, more and more developers have begun to use Golang to implement their applications. As a high-performance, document-oriented database, MongoDB is also liked and used by more and more people. This article will introduce how to use MongoDB for query in Golang.

First, we need to introduce the MongoDB driver package into Golang, as shown below:

import "go.mongodb.org/mongo-driver/mongo" import "go.mongodb.org/mongo-driver/mongo/options"

Next, we need to establish a MongoDB connection. The following is sample code:

func ConnectMongo(uri string) (*mongo.Client, error) { client, err := mongo.NewClient(options.Client().ApplyURI(uri)) if err != nil { return nil, err } ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() err = client.Connect(ctx) if err != nil { return nil, err } return client, nil }

whereuriis the connection string for the MongoDB database. We establish a MongoDB connection in theConnectMongofunction and return an instance ofmongo.Client.

Then you can perform query operations. The following is a simple query example. In this example, we query theuserscollection in thetestdatabase to find all users whose gender is male:

func FindMaleUsers(client *mongo.Client) ([]bson.M, error) { collection := client.Database("test").Collection("users") filter := bson.M{"sex": "male"} ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() cursor, err := collection.Find(ctx, filter) if err != nil { return nil, err } var results []bson.M if err = cursor.All(ctx, &results); err != nil { return nil, err } return results, nil }

In the above code, we first obtain theuserscollection in thetestdatabase, and then use thebson.Mtype structure to define the query conditions, that is, gender for men. Next, we use thectx, cancel := context.WithTimeout(context.Background(), 30*time.Second)function to create a context and suspend its cancellation function to limit the query operation time and allow for timely release of resources.

Then we use thecollection.Find(ctx, filter)function to query the database, wherectxis the context created above,filteris the query condition and a cursorcursoris returned.

Finally, we convert this cursor into abson.Marray through thecursor.All(ctx, &results)function, where&resultsIndicates that the address of the result is passed to this function for operation.

In addition to the above query operations, there are some other query methods, such as:

1. Exact match

In MongoDB, we can usebson. Dto represent the complete matching condition.

The following is a sample code:

func FindByCondition(client *mongo.Client) ([]bson.M, error) { collection := client.Database("test").Collection("users") filter := bson.D{ {"cond1", value1}, {"cond2", value2}, ... } ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() cursor, err := collection.Find(ctx, filter) if err != nil { return nil, err } var results []bson.M if err = cursor.All(ctx, &results); err != nil { return nil, err } return results, nil }

In the above code, we usebson.Dto fully match the query conditions, where{"cond1" , value1}and{“cond2”, value2}respectively represent key-value pairs in MongoDB.

2. Regular matching

In MongoDB, we can use regular expressions for query operations. The following is a sample code:

func FindByRegex(client *mongo.Client) ([]bson.M, error) { collection := client.Database("test").Collection("users") filter := bson.M{ "field": bson.M{"$regex": "pattern"}, } ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() cursor, err := collection.Find(ctx, filter) if err != nil { return nil, err } var results []bson.M if err = cursor.All(ctx, &results); err != nil { return nil, err } return results, nil }

In the above code, we use$regexto represent the regular expression, where"pattern"is the regular expression string .

Finally, after using MongoDB, we need to close the database connection to release related resources. The following is a sample code:

func CloseMongo(client *mongo.Client) error { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() return client.Disconnect(ctx) }

Through the above code, we can easily use MongoDB in Golang for query operations. Whether it is exact matching or regular matching, we can easily achieve it through the MongoDB driver package. At the same time, after use, the database connection must be closed promptly to release resources.

The above is the detailed content of golang mongodb query. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:How to reset golang Next article:How to reset golang