Use update operator not the update pipeline

This commit is contained in:
2020-11-18 22:30:16 +01:00
parent eeb1a8d598
commit fc2a867cbb
5 changed files with 45 additions and 15 deletions
+27 -2
View File
@@ -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
+3 -3
View File
@@ -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)
}