Add sort to find
This commit is contained in:
@@ -97,6 +97,8 @@ func mapToOp(v string) string {
|
||||
switch v {
|
||||
case "eq":
|
||||
return "$eq"
|
||||
case "le":
|
||||
return "$le"
|
||||
case "includes":
|
||||
return "$regex"
|
||||
default:
|
||||
|
||||
20
find.go
20
find.go
@@ -8,9 +8,10 @@ import (
|
||||
)
|
||||
|
||||
type FindOptions struct {
|
||||
Offset int64 `json:"offset"`
|
||||
Limit int64 `json:"limit"`
|
||||
Alias string `json:"alias"`
|
||||
Offset int64 `json:"offset"`
|
||||
Limit int64 `json:"limit"`
|
||||
Alias string `json:"alias"`
|
||||
Sort [][]any `json:"sort"`
|
||||
}
|
||||
|
||||
// Find is used to fetch the first page of data.
|
||||
@@ -31,8 +32,15 @@ func (c *MongoClient) Find(ctx context.Context, database, name string, filter bs
|
||||
|
||||
pageSize := max(limit, c.Limit)
|
||||
|
||||
sort := bson.M{"_id": 1}
|
||||
sortOpts := commons.BsonDFromSlice(opts.Sort)
|
||||
var sort bson.D
|
||||
|
||||
if len(sortOpts) == 0 {
|
||||
sort = sortOpts
|
||||
} else {
|
||||
sort = bson.D{{Key: "_id", Value: 1}}
|
||||
}
|
||||
|
||||
if err := c.DiscriminatorCheckAndApplyToFilter(ctx, name, filter); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -139,7 +147,9 @@ func (c *MongoClient) FindOffset(ctx context.Context, database, name string, fil
|
||||
Filter: filter,
|
||||
})
|
||||
|
||||
pipeline := BuildPaginationPipeline(offset, finalLimit, f, nil)
|
||||
sort := commons.BsonDFromSlice(opts.Sort)
|
||||
|
||||
pipeline := BuildPaginationPipeline(offset, finalLimit, f, sort)
|
||||
|
||||
// 2. Query
|
||||
cursor, err := collection.Aggregate(ctx, pipeline)
|
||||
|
||||
2
go.mod
2
go.mod
@@ -3,7 +3,7 @@ module git.gsuntres.com/general/mongo
|
||||
go 1.25.0
|
||||
|
||||
require (
|
||||
git.gsuntres.com/general/commons v0.0.0-20260423193720-28dcfb9e4ce9
|
||||
git.gsuntres.com/general/commons v0.0.0-20260425145405-80a923f150d3
|
||||
git.gsuntres.com/general/events v0.0.0-20260424194951-506e91ff46a2
|
||||
git.gsuntres.com/general/sys v0.0.1
|
||||
github.com/go-viper/mapstructure/v2 v2.5.0
|
||||
|
||||
12
go.sum
12
go.sum
@@ -2,12 +2,12 @@ dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
|
||||
dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
|
||||
git.gsuntres.com/general/commons v0.0.0-20260423193720-28dcfb9e4ce9 h1:wbyyIEMTQqnfE/AfYlzpSwtqbfUW5RP9F6Tt84S7RMI=
|
||||
git.gsuntres.com/general/commons v0.0.0-20260423193720-28dcfb9e4ce9/go.mod h1:S93xcBczrgN+gZU0JWkPRnTcAMvQuTp1ChyKkOd/I50=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424123722-6d275bca7319 h1:HB3q3hrUOrfREV6eJLIZa++QEyw9i0l3FAGkhRqb5Xs=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424123722-6d275bca7319/go.mod h1:IQEt0/YT7vYHLTmRhjpqdHgHhagIHZNaay83fndui7s=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424131043-d6c514c3c113 h1:snNU8UgQ50E1Ud3+hGSJzMZG+Y2ILbcfyF+DEdKDVP0=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424131043-d6c514c3c113/go.mod h1:IQEt0/YT7vYHLTmRhjpqdHgHhagIHZNaay83fndui7s=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424131248-c1c5eac835df h1:Ouu8cSqVKJAiJTmyvxeJm6gRjQ7IAhgdbkXDx0SnnHM=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424131248-c1c5eac835df/go.mod h1:IQEt0/YT7vYHLTmRhjpqdHgHhagIHZNaay83fndui7s=
|
||||
git.gsuntres.com/general/commons v0.0.0-20260425141140-13c75f62b178 h1:+4W5P1MoGF3cis8/HOHXbfAOVY/7UD59UWcMge9d450=
|
||||
git.gsuntres.com/general/commons v0.0.0-20260425141140-13c75f62b178/go.mod h1:S93xcBczrgN+gZU0JWkPRnTcAMvQuTp1ChyKkOd/I50=
|
||||
git.gsuntres.com/general/commons v0.0.0-20260425145405-80a923f150d3 h1:OyKK8RNTKt3exIJjxLvuTd1198TUXyGxbdvKlcLS+DU=
|
||||
git.gsuntres.com/general/commons v0.0.0-20260425145405-80a923f150d3/go.mod h1:S93xcBczrgN+gZU0JWkPRnTcAMvQuTp1ChyKkOd/I50=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424194951-506e91ff46a2 h1:nYzjFP7+foDz9GgGMkuiyMjKMm/N7S65zLU8TiTVqHQ=
|
||||
git.gsuntres.com/general/events v0.0.0-20260424194951-506e91ff46a2/go.mod h1:IQEt0/YT7vYHLTmRhjpqdHgHhagIHZNaay83fndui7s=
|
||||
git.gsuntres.com/general/sys v0.0.1 h1:JpGG6HCkJrTaCICR09kURhMTIc+/s8yb0lHQjo/TDVI=
|
||||
git.gsuntres.com/general/sys v0.0.1/go.mod h1:OVs7w4/tJO1GT7cLIeEsb90LuZqH2xYIVQODI5P1GJs=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"go.mongodb.org/mongo-driver/v2/mongo"
|
||||
)
|
||||
|
||||
func BuildPaginationPipeline(skip, limit int64, filter bson.M, sort bson.M) mongo.Pipeline {
|
||||
func BuildPaginationPipeline(skip, limit int64, filter bson.M, sort bson.D) mongo.Pipeline {
|
||||
pipe := mongo.Pipeline{
|
||||
// 1. GLOBAL FILTER: Always filter first to use indexes
|
||||
{{Key: "$match", Value: filter}},
|
||||
|
||||
@@ -80,6 +80,8 @@ func TestUpdateSet_WithAudit(t *testing.T) {
|
||||
after := onAudit_after.(bson.M)
|
||||
|
||||
before["name"] = "** CHANGED USING UPDATE SET **"
|
||||
delete(before, "updatedAt")
|
||||
delete(after, "updatedAt")
|
||||
|
||||
AssertSubset(t, after, before, "Should have been equal")
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user