Files
mongo/replace.go
2026-04-17 20:46:00 -04:00

48 lines
1000 B
Go

package mongo
import (
"context"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
)
func (c *MongoClient) Replace(ctx context.Context, database, name string, id string, data bson.M) (bson.M, error) {
collection := c.GetCollection(database, name)
filter := map[string]any { "_id": id }
var found bson.M
err := collection.FindOne(ctx, filter).Decode(&found)
if err != nil {
return nil, err
}
prepareForReplace(data, found)
if err := c.DiscriminatorCheckAndApplyToData(ctx, name, data); err != nil {
return nil, err
}
updateResult, err := collection.ReplaceOne(ctx, filter, data)
if err != nil {
return nil, err
}
PostReplace(updateResult, data, id)
return data, nil
}
func PostReplace(updateResult *mongo.UpdateResult, data bson.M, id string) {
if updateResult.ModifiedCount == 1 {
data["_id"] = id
}
}
func prepareForReplace(data bson.M, old bson.M) {
ensureNoId(data)
ensureUpdatedAt(data)
ensureExistingCreatedAt(data, old)
}