package mongo import ( "context" "fmt" "testing" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" ) func init() { Init(&Config{ Uri: "mongodb://192.168.0.254:27017", Database: "test", Username: "test", Password: "Test1231", Timeout: 3, }) } func TestMongo(t *testing.T) { if err := Ping(); err != nil { t.Fatal(err) } } type Student struct { ID primitive.ObjectID `bson:"_id" json:"id,omitempty"` Name string `json:"name,omitempty"` Sex string `json:"sex,omitempty"` } func TestInsert(t *testing.T) { client, err := New() if err != nil { t.Fatal(err) } ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() defer client.Disconnect(ctx) col, err := Collection(client, "student") if err != nil { t.Fatal(err) } // ret, err := col.InsertOne(ctx, Student{Name: "张惠", Sex: "女"}) ret, err := col.InsertOne(ctx, Student{ID: primitive.NewObjectID(), Name: "张惠", Sex: "女"}) if err != nil { t.Fatal(err) } fmt.Println(ret) } func TestDelete(t *testing.T) { client, err := New() if err != nil { t.Fatal(err) } ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() defer client.Disconnect(ctx) col, err := Collection(client, "student") if err != nil { t.Fatal(err) } if err := col.FindOneAndDelete(ctx, bson.D{{"name", "张惠"}}).Err(); err != nil { t.Fatal(err) } } func TestSingleResult(t *testing.T) { client, err := New() if err != nil { t.Fatal(err) } ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() defer client.Disconnect(ctx) col, err := Collection(client, "student") if err != nil { t.Fatal(err) } var result Student // if err := col.FindOne(ctx, bson.D{{"name", "张惠"}}).Decode(&result); err != nil { if err := col.FindOne(ctx, bson.M{"name": "张惠"}).Decode(&result); err != nil { if err != mongo.ErrNoDocuments { t.Fatal(err) } } fmt.Println(result) } func TestFindAll(t *testing.T) { client, err := New() if err != nil { t.Fatal(err) } ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() defer client.Disconnect(ctx) col, err := Collection(client, "student") if err != nil { t.Fatal(err) } cur, err := col.Find(ctx, bson.D{}) if err != nil { t.Fatal(err) } defer cur.Close(ctx) for cur.Next(ctx) { var result Student if err := cur.Decode(&result); err != nil { t.Fatal(err) } fmt.Println(result, result.ID.String(), result.ID.Timestamp(), result.ID.Timestamp().Local()) } if err := cur.Err(); err != nil { t.Fatal(err) } } func TestFind(t *testing.T) { client, err := New() if err != nil { t.Fatal(err) } ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() defer client.Disconnect(ctx) col, err := Collection(client, "student") if err != nil { t.Fatal(err) } cur, err := col.Find(ctx, bson.M{"name": bson.M{"$ne": "张惠"}}) //注意这里的格式$ne不相等,$gt大于,$gte大于等于,$in in,$nin no in ,$exists是否包含这个键... if err != nil { t.Fatal(err) } defer cur.Close(ctx) for cur.Next(ctx) { var result Student if err := cur.Decode(&result); err != nil { t.Fatal(err) } fmt.Println(result, result.ID.String(), result.ID.Timestamp(), result.ID.Timestamp().Local()) } if err := cur.Err(); err != nil { t.Fatal(err) } }