** mongo go若有数据则更新 无数据则新增**
if _, err := doc.Collection(TravelPathCollection).UpdateOne(ctx, mongoDB.IDQuer(param.Id), bson.M{"$set": param}, options.Update().SetUpsert(true)); err != nil {
mongoDB.LogMongoError(param.Id, TravelPathCollection, mongoDB.MongoDBFindError, err.Error())
return mongoDB.MongoInsertError
}
============================================================================================================
mongo go driver
package main
import (
"context"
"fmt"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type Trainer struct {
Name string
Age int
City string
}
func main() {
// Set client options
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// Connect to MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
// Check the connection
err = client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MongoDB!")
// Get a handle for your collection
collection := client.Database("test").Collection("trainers")
// Some dummy data to add to the Database
ash := Trainer{"Ash", 10, "Pallet Town"}
misty := Trainer{"Misty", 10, "Cerulean City"}
brock := Trainer{"Brock", 15, "Pewter City"}
// Insert a single document
insertResult, err := collection.InsertOne(context.TODO(), ash)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted a single document: ", insertResult.InsertedID)
// Insert multiple documents
trainers := []interface{}{misty, brock}
insertManyResult, err := collection.InsertMany(context.TODO(), trainers)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)
// Update a document
filter := bson.D{{"name", "Ash"}}
update := bson.D{
{"$inc", bson.D{
{"age", 1},
}},
}
updateResult, err := collection.UpdateOne(context.TODO(), filter, update)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
// Find a single document
var result Trainer
err = collection.FindOne(context.TODO(), filter).Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Found a single document: %+v\n", result)
findOptions := options.Find()
findOptions.SetLimit(2)
var results []*Trainer
// Finding multiple documents returns a cursor
cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)
if err != nil {
log.Fatal(err)
}
// Iterate through the cursor
for cur.Next(context.TODO()) {
var elem Trainer
err := cur.Decode(&elem)
if err != nil {
log.Fatal(err)
}
results = append(results, &elem)
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
// Close the cursor once finished
cur.Close(context.TODO())
fmt.Printf("Found multiple documents (array of pointers): %+v\n", results)
// Delete all the documents in the collection
deleteResult, err := collection.DeleteMany(context.TODO(), bson.D{{}})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult.DeletedCount)
// Close the connection once no longer needed
err = client.Disconnect(context.TODO())
if err != nil {
log.Fatal(err)
} else {
fmt.Println("Connection to MongoDB closed.")
}
}
**======================================================================================================================================================================================================================**
与数据库的链接
func ConnectToDB() *mgo.Collection {
session, err := mgo.Dial("127.0.0.1:27017")
if err != nil {
panic(err)
}
session.SetMode(mgo.Monotonic, true)
c := session.DB("test").C("stu")
return c
}
增
func InsertToMogo() {
c := ConnectToDB()
stu1 := Info{
Name: "haa",
Height: 2,
}
stu2 := Info{
Name: "helloworld",
Height: 180,
}
err := c.Insert(&stu1, &stu2)
if err != nil {
return
}
}
查
func GetMongo() {
c := ConnectToDB()
students := make([]Info, 20)
//c.Find(bson.M{"height": 180}) //.All(&students)
c.Find(nil).All(&students)
i := 0
for i < len(students) {
print(students[i].Name," ")
print(students[i].Height)
println()
i++
}
}