-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdelete_query.go
More file actions
82 lines (73 loc) · 2.22 KB
/
delete_query.go
File metadata and controls
82 lines (73 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package easymongo
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options"
)
// DeleteQuery stores the data necessary to execute a deletion. collection.Delete() returns an initialized DeleteQuery.
type DeleteQuery struct {
*Query
}
// Delete helps construct and execute deletion queries.
// Use with .One and .Many
func (c *Collection) Delete(filter interface{}) *DeleteQuery {
return &DeleteQuery{
Query: c.query(filter),
}
}
// deleteOptions returns the native mongo driver options.DeleteOptions using
// the provided query information.
func (dq *DeleteQuery) deleteOptions() *options.DeleteOptions {
o := &options.DeleteOptions{
Collation: dq.collation,
}
if dq.hintIndices != nil {
o.Hint = *dq.hintIndices
}
return o
}
// One calls out to DeleteOne() which deletes the first entry matching the
// filter query provided to Delete().
func (dq *DeleteQuery) One() (err error) {
ctx, cancelFunc := dq.getContext()
defer cancelFunc()
opts := dq.deleteOptions()
_, err = dq.collection.mongoColl.DeleteOne(ctx, dq.filter, opts)
err = dq.collection.handleErr(err)
if err != nil {
return err
}
// TODO: Handle ErrNotFound
// if res.DeletedCount == 0 { err = ErrNotFound }
return err
}
// Many calls out to DeleteMany() which deletes all entries matching the
// filter query provided to Delete().
func (dq *DeleteQuery) Many() (numDeleted int, err error) {
ctx, cancelFunc := dq.getContext()
defer cancelFunc()
opts := dq.deleteOptions()
res, err := dq.collection.mongoColl.DeleteMany(ctx, dq.filter, opts)
err = dq.collection.handleErr(err)
if err != nil {
return numDeleted, err
}
if res != nil {
numDeleted = int(res.DeletedCount)
}
// TODO: Handle ErrNotFound
// if res.DeletedCount == 0 { err = ErrNotFound }
return numDeleted, err
}
// DeleteByID assumes that an ID is an ObjectID and the ID is located at _id.
func (c *Collection) DeleteByID(id primitive.ObjectID) (err error) {
return c.Delete(bson.M{"_id": id}).One()
}
func (dq *DeleteQuery) Collation(c *options.Collation) *DeleteQuery {
dq.Query.setCollation(c)
return dq
}
func (dq *DeleteQuery) Hint(indexKeys ...string) *DeleteQuery {
dq.Query.setHint(indexKeys...)
return dq
}