diff --git a/e2e/mongo/nested/gen_User_mongo_orm.go b/e2e/mongo/nested/gen_User_mongo_orm.go index 3b0bf53..c96fdcf 100644 --- a/e2e/mongo/nested/gen_User_mongo_orm.go +++ b/e2e/mongo/nested/gen_User_mongo_orm.go @@ -2,6 +2,7 @@ package nested import ( "context" + "time" "github.com/ezbuy/ezorm/v2/pkg/orm" @@ -11,6 +12,9 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) +// To import `time` package globally to satisfy `time.Time` index in yaml definition +var _ time.Time + var UserIndexes = []mongo.IndexModel{ { Keys: UserIndexKey_Username, diff --git a/e2e/mongo/user/gen_UserBlog_mongo_orm.go b/e2e/mongo/user/gen_UserBlog_mongo_orm.go index f64d191..a2e7f6e 100644 --- a/e2e/mongo/user/gen_UserBlog_mongo_orm.go +++ b/e2e/mongo/user/gen_UserBlog_mongo_orm.go @@ -2,6 +2,7 @@ package user import ( "context" + "time" "github.com/ezbuy/ezorm/v2/pkg/orm" @@ -11,6 +12,9 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) +// To import `time` package globally to satisfy `time.Time` index in yaml definition +var _ time.Time + var UserBlogIndexes = []mongo.IndexModel{ { Keys: UserBlogIndexKey_UserId, diff --git a/e2e/mongo/user/gen_User_mongo_orm.go b/e2e/mongo/user/gen_User_mongo_orm.go index 134a64f..c9267fd 100644 --- a/e2e/mongo/user/gen_User_mongo_orm.go +++ b/e2e/mongo/user/gen_User_mongo_orm.go @@ -2,6 +2,7 @@ package user import ( "context" + "time" "github.com/ezbuy/ezorm/v2/pkg/orm" @@ -11,6 +12,9 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) +// To import `time` package globally to satisfy `time.Time` index in yaml definition +var _ time.Time + var UserIndexes = []mongo.IndexModel{ { Keys: UserIndexKey_UsernameAge, @@ -21,6 +25,9 @@ var UserIndexes = []mongo.IndexModel{ { Keys: UserIndexKey_Age, }, + { + Keys: UserIndexKey_RegisterDate, + }, } var UserIndexesFunc = func() { @@ -36,6 +43,9 @@ var UserIndexKey_Username = bson.D{ var UserIndexKey_Age = bson.D{ {Key: "Age", Value: 1}, } +var UserIndexKey_RegisterDate = bson.D{ + {Key: "RegisterDate", Value: 1}, +} func init() { orm.RegisterEzOrmObjByID("mongo_e2e", "User", newUserFindByID) @@ -226,6 +236,18 @@ func (o *_UserMgr) FindByAge(ctx context.Context, Age int32, limit int, offset i return } +func (o *_UserMgr) FindByRegisterDate(ctx context.Context, RegisterDate time.Time, limit int, offset int, sortFields interface{}) (result []*User, err error) { + query := bson.M{ + "RegisterDate": RegisterDate, + } + cursor, err := o.Query(ctx, query, limit, offset, sortFields) + if err != nil { + return nil, err + } + err = cursor.All(ctx, &result) + return +} + func (o *_UserMgr) Find(ctx context.Context, query interface{}, limit int, offset int, sortFields interface{}) (result []*User, err error) { cursor, err := o.Query(ctx, query, limit, offset, sortFields) if err != nil { diff --git a/e2e/mongo/user/gen_User_struct.go b/e2e/mongo/user/gen_User_struct.go index 1c8fab8..d3338da 100644 --- a/e2e/mongo/user/gen_User_struct.go +++ b/e2e/mongo/user/gen_User_struct.go @@ -35,10 +35,12 @@ const ( type UserMgoSortField_WRP = primitive.D var ( - UserMgoSortFieldIDAsc = primitive.E{Key: "_id", Value: 1} - UserMgoSortFieldIDDesc = primitive.E{Key: "_id", Value: -1} - UserMgoSortFieldAgeAsc = primitive.E{Key: "Age", Value: 1} - UserMgoSortFieldAgeDesc = primitive.E{Key: "Age", Value: -1} + UserMgoSortFieldIDAsc = primitive.E{Key: "_id", Value: 1} + UserMgoSortFieldIDDesc = primitive.E{Key: "_id", Value: -1} + UserMgoSortFieldAgeAsc = primitive.E{Key: "Age", Value: 1} + UserMgoSortFieldAgeDesc = primitive.E{Key: "Age", Value: -1} + UserMgoSortFieldRegisterDateAsc = primitive.E{Key: "registerDate", Value: 1} + UserMgoSortFieldRegisterDateDesc = primitive.E{Key: "registerDate", Value: -1} ) func (p *User) GetNameSpace() string { diff --git a/e2e/mongo/user/user.yaml b/e2e/mongo/user/user.yaml index 1440bba..e658ae9 100644 --- a/e2e/mongo/user/user.yaml +++ b/e2e/mongo/user/user.yaml @@ -12,6 +12,7 @@ User: flags: [sort] - RegisterDate: time.Time attrs: {bsonTag: "registerDate", jsonTag: "registerDate"} + flags: [sort] indexes: [[Username, Age]] table: test_user dbname: test diff --git a/e2e/mongo/user/user_test.go b/e2e/mongo/user/user_test.go index 832c2f5..168aa32 100644 --- a/e2e/mongo/user/user_test.go +++ b/e2e/mongo/user/user_test.go @@ -299,11 +299,13 @@ func TestFindByIndexes(t *testing.T) { u1.UserId = uid1 u1.Username = uname1 u1.Age = globalAge + u1.RegisterDate = time.Now() u2 := user.Get_UserMgr().NewUser() u2.UserId = uid2 u2.Username = uname2 u2.Age = globalAge + u2.RegisterDate = time.Now().Add(time.Hour) cleanFn := initUsersHelper(t, u1, u2) { @@ -326,11 +328,24 @@ func TestFindByIndexes(t *testing.T) { t.Fatalf("unexpected length of users, got %d, expect: %d", l, 0) } } + { + users, err := user.Get_UserMgr().FindAll(ctx, bson.M{}, user.UserMgoSortField_WRP{user.UserMgoSortFieldRegisterDateDesc}) + if err != nil { + t.Fatalf("failed to find by username and age: %s", err) + } + if l := len(users); l != 2 { + t.Fatalf("unexpected length of users, got %d, expect: %d", l, 2) + } + if uid := users[0].UserId; uid != uid2 { + t.Fatalf("unexpected uid of users, got: %d, expect: %d", uid, uid2) + } + } if err := cleanFn(ctx); err != nil { t.Fatalf("failed to remove all users: %s", err) } } + func TestCount(t *testing.T) { const ( uid1 = 1 diff --git a/internal/parser/shared/tpl/mongo_orm.gogo b/internal/parser/shared/tpl/mongo_orm.gogo index 1ba62ad..edd7d85 100644 --- a/internal/parser/shared/tpl/mongo_orm.gogo +++ b/internal/parser/shared/tpl/mongo_orm.gogo @@ -4,16 +4,20 @@ {{if ($obj.DbSwitch "mongo")}} import ( "context" + "time" "github.com/ezbuy/ezorm/v2/pkg/orm" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" ) -{{- if gt (len $obj.Indexes) 0}} +// To import `time` package globally to satisfy `time.Time` index in yaml definition +var _ time.Time + +{{if gt (len $obj.Indexes) 0}} var {{$obj.Name}}Indexes = []mongo.IndexModel{ {{- range $index := $obj.Indexes}} {