/
helper.go
47 lines (43 loc) · 1020 Bytes
/
helper.go
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
package mongo
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// A helper function which converts a struct value to a bson.Document.
func toDoc(v interface{}) (doc interface{}, err error) {
data, err := bson.Marshal(v)
if err != nil {
return
}
err = bson.Unmarshal(data, &doc)
return
}
func toObjectIDs(ids []string) ([]primitive.ObjectID, error) {
objectIDs := make([]primitive.ObjectID, 0, len(ids))
for _, id := range ids {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return objectIDs, err
}
objectIDs = append(objectIDs, objectID)
}
return objectIDs, nil
}
func newFindByIDsPipeline(objectIDs []primitive.ObjectID) []primitive.M {
return []bson.M{
{
"$match": bson.M{
"_id": bson.M{"$in": objectIDs},
"deletedAt": bson.M{"$exists": false},
},
},
{
"$addFields": bson.M{
"idOrder": bson.M{"$indexOfArray": bson.A{objectIDs, "$_id"}},
},
},
{
"$sort": bson.M{"idOrder": 1},
},
}
}