mirror of
https://github.com/mainnika/mongox-go-driver.git
synced 2026-05-22 15:53:36 +00:00
Use update operator not the update pipeline
This commit is contained in:
+27
-2
@@ -1,6 +1,9 @@
|
||||
package query
|
||||
|
||||
import (
|
||||
"github.com/modern-go/reflect2"
|
||||
"github.com/valyala/bytebufferpool"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
@@ -66,13 +69,35 @@ func (q *Query) Skipper() (skip *int64) {
|
||||
}
|
||||
|
||||
// Updater is an update command for a query
|
||||
func (q *Query) Updater() (update primitive.A) {
|
||||
func (q *Query) Updater() (update primitive.M, err error) {
|
||||
|
||||
if q.updater == nil {
|
||||
update = primitive.M{}
|
||||
return
|
||||
}
|
||||
|
||||
return q.updater.Update()
|
||||
update = q.updater.Update()
|
||||
|
||||
if reflect2.IsNil(update) {
|
||||
update = primitive.M{}
|
||||
return
|
||||
}
|
||||
|
||||
buffer := bytebufferpool.Get()
|
||||
defer bytebufferpool.Put(buffer)
|
||||
|
||||
// convert update document to bson map values
|
||||
bsonBytes, err := bson.MarshalAppend(buffer.B, update)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
update = primitive.M{}
|
||||
err = bson.Unmarshal(bsonBytes, update)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Preloader is a preloader list for a query
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
|
||||
// Updater is a filter to update the data
|
||||
type Updater interface {
|
||||
Update() (update primitive.A)
|
||||
Update() (update primitive.M)
|
||||
}
|
||||
|
||||
// Update is a simple implementations of the Updater filter
|
||||
@@ -15,6 +15,6 @@ type Update primitive.M
|
||||
var _ Updater = &Update{}
|
||||
|
||||
// Update returns an update command
|
||||
func (u Update) Update() (update primitive.A) {
|
||||
return primitive.A{primitive.M(u)}
|
||||
func (u Update) Update() (update primitive.M) {
|
||||
return primitive.M(u)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user