diff --git a/go.mod b/go.mod
index aab397c52d3979014f1063634cf9fbca384eb5e1..5fa79a32f0c3cd1302ee6fb933860fd1caef5958 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 249be0a47619d18d0711ba369086369b6f604245..2222bc3682ee840d4128d39a12b3b3f03f734969 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 c5fca60fb1856ca72138daa5da42d7fb9e6c6674..229992d6d5f2ad37a2ecfa35f29967f868652fe1 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 3a3ff12641fd9dfee4ac458a3677fad3a4f0a501..b0eaef8e7ca076602d7f606d72f9b1b838b8da2f 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 6e189db8195a1b0a80d0c715ef53b335c5e546ac..cf5cfc1fc0f1ba7c4fb8b755a3a5c6ae3edcaae3 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 587f25769e4a850d29d00fff3c93c09c6e647eb5..2b1eac7d73506d6884cb5237fac9454e8d003905 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 d75dc99886698a14342dc4f5ad4d9423fc26d893..9209a3bf84d5a048df5f7fe8b90add7c8e8e249f 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 7283e26a0dfebcc5159211e49c30dc29150f12db..c5951224239b69467f56cae0b3be20cfa1b86258 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 676f208c3304eb4840f43161a52a7a63779c6c8e..62ae23d0deaa5f64289d44d022a232ffb725a7ba 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 97aea3ea8aecbf206325bbd1b49363669ce0436d..20df8c5ae26abe5d2af96cc61a5c8b9bb0167917 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{}