From 73e086d84e6606ba0ed8aac207a2d6edcd560cdf Mon Sep 17 00:00:00 2001
From: ko_oler <kooler89@gmail.com>
Date: Thu, 29 May 2025 16:57:06 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=20mongo-driver=20=D0=B4=D0=BE=20=D0=B2=D0=B5=D1=80=D1=81?=
 =?UTF-8?q?=D0=B8=D0=B8=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 go.mod                       |  8 ++++----
 go.sum                       |  4 ++--
 id/bson_test.go              |  2 +-
 id/object_id.go              | 22 ++++++++++------------
 pkg/expr/mongo.go            |  2 +-
 pkg/expr/mongo_test.go       |  2 +-
 pkg/filter/filter.go         |  5 ++---
 pkg/filter/filter_test.go    | 16 ++++++++--------
 pkg/references/reference.go  |  2 +-
 pkg/schema/field/location.go |  6 +++---
 10 files changed, 33 insertions(+), 36 deletions(-)

diff --git a/go.mod b/go.mod
index aab397c5..5fa79a32 100644
--- a/go.mod
+++ b/go.mod
@@ -15,10 +15,10 @@ require (
 	github.com/nats-io/nats.go v1.42.0
 	github.com/pkg/errors v0.9.1
 	github.com/rs/xid v1.6.0
-	github.com/stretchr/testify v1.10.0
-	go.mongodb.org/mongo-driver v1.17.3
-	go.opentelemetry.io/otel v1.36.0
-	go.opentelemetry.io/otel/trace v1.36.0
+	github.com/stretchr/testify v1.9.0
+	go.mongodb.org/mongo-driver/v2 v2.2.1
+	go.opentelemetry.io/otel v1.30.0
+	go.opentelemetry.io/otel/trace v1.30.0
 	go.uber.org/zap v1.27.0
 	golang.org/x/crypto v0.38.0
 	golang.org/x/image v0.27.0
diff --git a/go.sum b/go.sum
index 249be0a4..2222bc36 100644
--- a/go.sum
+++ b/go.sum
@@ -88,8 +88,8 @@ github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gi
 github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
 github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ=
-go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
+go.mongodb.org/mongo-driver/v2 v2.2.1 h1:w5xra3yyu/sGrziMzK1D0cRRaH/b7lWCSsoN6+WV6AM=
+go.mongodb.org/mongo-driver/v2 v2.2.1/go.mod h1:qQkDMhCGWl3FN509DfdPd4GRBLU/41zqF/k8eTRceps=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
 go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
diff --git a/id/bson_test.go b/id/bson_test.go
index c5fca60f..229992d6 100644
--- a/id/bson_test.go
+++ b/id/bson_test.go
@@ -5,7 +5,7 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
-	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/v2/bson"
 )
 
 func TestID_MarshalUnmarshalBSON(t *testing.T) {
diff --git a/id/object_id.go b/id/object_id.go
index 3a3ff126..b0eaef8e 100644
--- a/id/object_id.go
+++ b/id/object_id.go
@@ -4,9 +4,7 @@ import (
 	"strings"
 
 	jsoniter "github.com/json-iterator/go"
-	"go.mongodb.org/mongo-driver/bson"
-	"go.mongodb.org/mongo-driver/bson/bsonrw"
-	"go.mongodb.org/mongo-driver/bson/bsontype"
+	"go.mongodb.org/mongo-driver/v2/bson"
 )
 
 const Separator = '/'
@@ -63,26 +61,26 @@ func (oid *ObjectId) UnmarshalJSON(b []byte) error {
 	return nil
 }
 
-func (oid *ObjectId) MarshalBSONValue() (bsontype.Type, []byte, error) {
-	return bson.MarshalValue(oid.String())
+func (oid *ObjectId) MarshalBSONValue() (byte, []byte, error) {
+	t, data, err := bson.MarshalValue(oid.String())
+	return byte(t), data, err
 }
 
-func (oid *ObjectId) UnmarshalBSONValue(btype bsontype.Type, data []byte) error {
-	if btype != bson.TypeString {
+func (oid *ObjectId) UnmarshalBSONValue(btype byte, data []byte) error {
+	if bson.Type(btype) != bson.TypeString {
 		return ErrInvalidType
 	}
-	dec, err := bson.NewDecoder(bsonrw.NewBSONValueReader(btype, data))
-	if err != nil {
-		return err
-	}
+
 	var str string
-	if err = dec.Decode(&str); err != nil {
+	if err := bson.UnmarshalValue(bson.TypeString, data, &str); err != nil {
 		return err
 	}
+
 	t, err := FromString(str)
 	if err != nil {
 		return err
 	}
+
 	*oid = *t
 	return nil
 }
diff --git a/pkg/expr/mongo.go b/pkg/expr/mongo.go
index 6e189db8..cf5cfc1f 100644
--- a/pkg/expr/mongo.go
+++ b/pkg/expr/mongo.go
@@ -12,7 +12,7 @@ import (
 	exprcompiler "github.com/expr-lang/expr/compiler"
 	"github.com/expr-lang/expr/conf"
 	"github.com/expr-lang/expr/parser"
-	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/v2/bson"
 )
 
 var geoTypes = map[string]string{
diff --git a/pkg/expr/mongo_test.go b/pkg/expr/mongo_test.go
index 587f2576..2b1eac7d 100644
--- a/pkg/expr/mongo_test.go
+++ b/pkg/expr/mongo_test.go
@@ -10,7 +10,7 @@ import (
 	"github.com/expr-lang/expr/ast"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
-	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/v2/bson"
 	"golang.org/x/net/context"
 )
 
diff --git a/pkg/filter/filter.go b/pkg/filter/filter.go
index d75dc998..9209a3bf 100644
--- a/pkg/filter/filter.go
+++ b/pkg/filter/filter.go
@@ -12,8 +12,7 @@ import (
 	"git.perx.ru/perxis/perxis-go/pkg/schema/validate"
 	"github.com/hashicorp/go-multierror"
 	"github.com/mitchellh/mapstructure"
-	"go.mongodb.org/mongo-driver/bson"
-	"go.mongodb.org/mongo-driver/bson/primitive"
+	"go.mongodb.org/mongo-driver/v2/bson"
 )
 
 type Op string
@@ -325,7 +324,7 @@ func (b *mongoQueryBuilder) query(f *Filter) bson.M {
 		val, _ := f.Value.(string)
 		return bson.M{
 			b.field(f.Field): bson.M{
-				b.getOp(f.Op): primitive.Regex{Pattern: val},
+				b.getOp(f.Op): bson.Regex{Pattern: val},
 			},
 		}
 
diff --git a/pkg/filter/filter_test.go b/pkg/filter/filter_test.go
index 7283e26a..c5951224 100644
--- a/pkg/filter/filter_test.go
+++ b/pkg/filter/filter_test.go
@@ -8,7 +8,7 @@ import (
 	"git.perx.ru/perxis/perxis-go/pkg/schema/field"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
-	"go.mongodb.org/mongo-driver/bson/primitive"
+	"go.mongodb.org/mongo-driver/v2/bson"
 )
 
 func TestFilterHandler(t *testing.T) {
@@ -186,7 +186,7 @@ func TestFilterHandler(t *testing.T) {
 	t.Run("Build Query", func(t *testing.T) {
 		t.Run("No Filters", func(t *testing.T) {
 			res := h.Query()
-			require.IsType(t, res, primitive.M{})
+			require.IsType(t, res, bson.M{})
 
 			pres := ph.Query()
 			assert.Equal(t, res, pres, "пустой запрос с префиксом и без должны быть одинаковые")
@@ -194,9 +194,9 @@ func TestFilterHandler(t *testing.T) {
 		t.Run("Equal String", func(t *testing.T) {
 			f := &Filter{Op: Equal, Field: "data.str", Value: "zzz"}
 			res := h.Query(f)
-			b, ok := res.(primitive.M)
+			b, ok := res.(bson.M)
 			require.True(t, ok)
-			assert.Equal(t, primitive.M{"$and": primitive.A{primitive.M{"data.str": primitive.M{"$eq": "zzz"}}}}, b)
+			assert.Equal(t, bson.M{"$and": bson.A{bson.M{"data.str": bson.M{"$eq": "zzz"}}}}, b)
 
 			pf := &Filter{Op: Equal, Field: "data.str", Value: "zzz"}
 			pres := ph.Query(pf)
@@ -206,17 +206,17 @@ func TestFilterHandler(t *testing.T) {
 			w, _ := time.Parse(time.RFC3339, "2012-11-01T22:08:41Z")
 			f := &Filter{Op: In, Field: "obj.arr", Value: []interface{}{w}}
 			res := h.Query(f)
-			b, ok := res.(primitive.M)
+			b, ok := res.(bson.M)
 			require.True(t, ok)
-			assert.Equal(t, primitive.M{"$and": primitive.A{primitive.M{"obj.arr": primitive.M{"$in": []interface{}{w}}}}}, b)
+			assert.Equal(t, bson.M{"$and": bson.A{bson.M{"obj.arr": bson.M{"$in": []interface{}{w}}}}}, b)
 		})
 		t.Run("Several ops for one field", func(t *testing.T) {
 			w, _ := time.Parse(time.RFC3339, "2012-11-01T22:08:41Z")
 			f := &Filter{Op: In, Field: "obj.arr", Value: []interface{}{w}}
 			res := h.Query(f)
-			b, ok := res.(primitive.M)
+			b, ok := res.(bson.M)
 			require.True(t, ok)
-			assert.Equal(t, primitive.M{"$and": primitive.A{primitive.M{"obj.arr": primitive.M{"$in": []interface{}{w}}}}}, b)
+			assert.Equal(t, bson.M{"$and": bson.A{bson.M{"obj.arr": bson.M{"$in": []interface{}{w}}}}}, b)
 		})
 	})
 }
diff --git a/pkg/references/reference.go b/pkg/references/reference.go
index 676f208c..62ae23d0 100644
--- a/pkg/references/reference.go
+++ b/pkg/references/reference.go
@@ -5,7 +5,7 @@ import (
 
 	"git.perx.ru/perxis/perxis-go/pkg/items"
 	pb "git.perx.ru/perxis/perxis-go/proto/references"
-	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/v2/bson"
 )
 
 type Reference struct {
diff --git a/pkg/schema/field/location.go b/pkg/schema/field/location.go
index 97aea3ea..20df8c5a 100644
--- a/pkg/schema/field/location.go
+++ b/pkg/schema/field/location.go
@@ -5,9 +5,9 @@ import (
 
 	"git.perx.ru/perxis/perxis-go/pkg/errors"
 	"github.com/mitchellh/mapstructure"
-	"go.mongodb.org/mongo-driver/bson"
-	"go.mongodb.org/mongo-driver/mongo"
-	"go.mongodb.org/mongo-driver/mongo/options"
+	"go.mongodb.org/mongo-driver/v2/bson"
+	"go.mongodb.org/mongo-driver/v2/mongo"
+	"go.mongodb.org/mongo-driver/v2/mongo/options"
 )
 
 var locationType = &LocationType{}
-- 
GitLab