replace ReplaceOne
with UpdateOne
this keeps timestamps intact...
This commit is contained in:
parent
33af8ce8e7
commit
ad7c7f38af
@ -2,6 +2,7 @@ package orm
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/fatih/structtag"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
@ -122,7 +123,7 @@ func doSave(c *mongo.Collection, isNew bool, opts *SaveOptions, arg interface{})
|
||||
}
|
||||
var asHasId = vp.Interface().(HasID)
|
||||
var asModel = vp.Interface().(IDocument)
|
||||
if isNew && opts.SetTimestamps {
|
||||
if (isNew && reflect.ValueOf(asHasId.Id()).IsZero()) && opts.SetTimestamps {
|
||||
d.setCreated(now)
|
||||
}
|
||||
if opts.SetTimestamps {
|
||||
@ -135,6 +136,7 @@ func doSave(c *mongo.Collection, isNew bool, opts *SaveOptions, arg interface{})
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if isNew {
|
||||
nid := getLastInColl(c.Name(), asHasId.Id())
|
||||
pnid := incrementInterface(nid)
|
||||
@ -148,9 +150,23 @@ func doSave(c *mongo.Collection, isNew bool, opts *SaveOptions, arg interface{})
|
||||
_, err = c.InsertOne(context.TODO(), d.serializeToStore())
|
||||
if err == nil {
|
||||
d.setExists(true)
|
||||
} else {
|
||||
_, err = c.UpdateOne(context.TODO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, bson.M{
|
||||
"$set": d.serializeToStore(),
|
||||
})
|
||||
//_, err = c.ReplaceOne(context.TO_DO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, d.serializeToStore())
|
||||
}
|
||||
} else {
|
||||
_, err = c.ReplaceOne(context.TODO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, d.serializeToStore())
|
||||
//_, err = c.ReplaceOne(context.TO_DO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, d.serializeToStore())
|
||||
_, err = c.UpdateOne(context.TODO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, bson.M{
|
||||
"$set": d.serializeToStore(),
|
||||
})
|
||||
if errors.Is(err, mongo.ErrNoDocuments) {
|
||||
_, err = c.InsertOne(context.TODO(), d.serializeToStore())
|
||||
if err == nil {
|
||||
d.setExists(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user