Home>Article>Backend Development> golang mongodb query
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 }
whereuri
is the connection string for the MongoDB database. We establish a MongoDB connection in theConnectMongo
function and return an instance ofmongo.Client
.
Then you can perform query operations. The following is a simple query example. In this example, we query theusers
collection in thetest
database 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 theusers
collection in thetest
database, and then use thebson.M
type 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, wherectx
is the context created above,filter
is the query condition and a cursorcursor
is returned.
Finally, we convert this cursor into abson.M
array through thecursor.All(ctx, &results)
function, where&results
Indicates 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:
In MongoDB, we can usebson. D
to 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.D
to fully match the query conditions, where{"cond1" , value1}
and{“cond2”, value2}
respectively represent key-value pairs in MongoDB.
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$regex
to 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!