152 lines
3.4 KiB
Go
152 lines
3.4 KiB
Go
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)
|
|
}
|
|
}
|