mirror of
https://github.com/mainnika/mongox-go-driver.git
synced 2026-05-22 15:53:36 +00:00
Add filters support for an array deleting
This commit is contained in:
@@ -8,10 +8,11 @@ import (
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"github.com/mainnika/mongox-go-driver/v2/mongox/base"
|
||||
"github.com/mainnika/mongox-go-driver/v2/mongox/query"
|
||||
)
|
||||
|
||||
// DeleteArray removes documents list from a database by their ids
|
||||
func (d *Database) DeleteArray(target interface{}) (err error) {
|
||||
func (d *Database) DeleteArray(target interface{}, filters ...interface{}) (err error) {
|
||||
|
||||
targetV := reflect.ValueOf(target)
|
||||
targetT := targetV.Type()
|
||||
@@ -37,6 +38,7 @@ func (d *Database) DeleteArray(target interface{}) (err error) {
|
||||
collection := d.GetCollectionOf(zeroElem.Interface())
|
||||
opts := options.Delete()
|
||||
ids := primitive.A{}
|
||||
composed := query.Compose(filters...)
|
||||
|
||||
for i := 0; i < targetLen; i++ {
|
||||
elem := targetSliceV.Index(i)
|
||||
@@ -47,7 +49,9 @@ func (d *Database) DeleteArray(target interface{}) (err error) {
|
||||
return fmt.Errorf("can't delete zero elements")
|
||||
}
|
||||
|
||||
result, err := collection.DeleteMany(d.Context(), primitive.M{"_id": primitive.M{"$in": ids}}, opts)
|
||||
composed.And(primitive.M{"_id": primitive.M{"$in": ids}})
|
||||
|
||||
result, err := collection.DeleteMany(d.Context(), composed.M(), opts)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ type Database interface {
|
||||
New(ctx context.Context) (db Database)
|
||||
GetCollectionOf(document interface{}) (collection *Collection)
|
||||
Count(target interface{}, filters ...interface{}) (count int64, err error)
|
||||
DeleteArray(target interface{}) (err error)
|
||||
DeleteArray(target interface{}, filters ...interface{}) (err error)
|
||||
DeleteOne(target interface{}, filters ...interface{}) (err error)
|
||||
LoadArray(target interface{}, filters ...interface{}) (err error)
|
||||
LoadOne(target interface{}, filters ...interface{}) (err error)
|
||||
|
||||
Reference in New Issue
Block a user