diff --git a/mongox/database/saveone.go b/mongox/database/saveone.go index 5a09777..bbd02df 100644 --- a/mongox/database/saveone.go +++ b/mongox/database/saveone.go @@ -12,13 +12,15 @@ import ( ) // SaveOne saves a single source document to the database -func (d *Database) SaveOne(source interface{}) (err error) { +func (d *Database) SaveOne(source interface{}, filters ...interface{}) (err error) { collection := d.GetCollectionOf(source) opts := options.FindOneAndReplace() id := base.GetID(source) protected := base.GetProtection(source) - composed := query.Compose(bson.M{"_id": id}) + composed := query.Compose(filters...) + + composed.And(bson.M{"_id": id}) opts.SetUpsert(true) opts.SetReturnDocument(options.After) diff --git a/mongox/mongox.go b/mongox/mongox.go index c8a3834..b3e2f0d 100644 --- a/mongox/mongox.go +++ b/mongox/mongox.go @@ -27,7 +27,7 @@ type Database interface { LoadArray(target interface{}, filters ...interface{}) (err error) LoadOne(target interface{}, filters ...interface{}) (err error) LoadStream(target interface{}, filters ...interface{}) (loader StreamLoader, err error) - SaveOne(source interface{}) (err error) + SaveOne(source interface{}, filters ...interface{}) (err error) IndexEnsure(cfg interface{}, document interface{}) (err error) }