diff options
Diffstat (limited to '')
-rw-r--r-- | listener/mongo.go (renamed from src/mongo.go) | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/mongo.go b/listener/mongo.go index 1d9f74f..a51350e 100644 --- a/src/mongo.go +++ b/listener/mongo.go | |||
@@ -2,6 +2,8 @@ package main | |||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "context" | 4 | "context" |
5 | "fmt" | ||
6 | "reflect" | ||
5 | "time" | 7 | "time" |
6 | 8 | ||
7 | "go.mongodb.org/mongo-driver/bson" | 9 | "go.mongodb.org/mongo-driver/bson" |
@@ -62,16 +64,38 @@ func (mc *mongoClient) UpdateMany(filter, update interface{}) error { | |||
62 | return err | 64 | return err |
63 | } | 65 | } |
64 | 66 | ||
65 | func (mc *mongoClient) Finddoc(filter bson.M) ([]bson.M, error) { | 67 | func (mc *mongoClient) ReplaceOne(filter, new interface{}) error { |
66 | cur, err := mc.col.Find(context.Background(), filter) | 68 | _, err := mc.col.ReplaceOne(context.Background(), filter, new) |
69 | return err | ||
70 | } | ||
71 | |||
72 | func (mc *mongoClient) Finddoc(filter bson.M, results interface{}) error { | ||
73 | sliceValue := reflect.ValueOf(results) | ||
74 | |||
75 | if sliceValue.Kind() != reflect.Ptr || sliceValue.Elem().Kind() != reflect.Slice { | ||
76 | return fmt.Errorf("Error: result argument must be pointer to slice") | ||
77 | } | ||
78 | cur, err := mc.col.Find(context.TODO(), filter) | ||
67 | if err != nil { | 79 | if err != nil { |
68 | return nil, err | 80 | return err |
69 | } | 81 | } |
82 | defer cur.Close(context.TODO()) | ||
83 | |||
84 | elemType := sliceValue.Elem().Type().Elem() | ||
70 | 85 | ||
71 | var results []bson.M | 86 | sliceValue = sliceValue.Elem() |
72 | err = cur.All(context.Background(), &results) | ||
73 | 87 | ||
74 | return results, err | 88 | for cur.Next(context.TODO()) { |
89 | elem := reflect.New(elemType).Interface() | ||
90 | err := cur.Decode(elem) | ||
91 | if err != nil { | ||
92 | return err | ||
93 | } | ||
94 | sliceValue = reflect.Append(sliceValue, reflect.ValueOf(elem).Elem()) | ||
95 | } | ||
96 | |||
97 | reflect.ValueOf(results).Elem().Set(sliceValue) | ||
98 | return nil | ||
75 | } | 99 | } |
76 | 100 | ||
77 | func (mc *mongoClient) FindOneAndDelete(filter bson.M) (bson.M, error) { | 101 | func (mc *mongoClient) FindOneAndDelete(filter bson.M) (bson.M, error) { |