@@ -19,6 +19,9 @@ import (
1919//nolint:gochecknoglobals
2020var yes = true // for ref
2121
22+ //nolint:gochecknoglobals
23+ var simpleCollation = & options.Collation {Locale : "simple" }
24+
2225//nolint:gochecknoglobals
2326var clientBulkOptions = options .ClientBulkWrite ().
2427 SetOrdered (true ).
@@ -41,12 +44,14 @@ type bulkWrite interface {
4144}
4245
4346type clientBulkWrite struct {
44- writes []mongo.ClientBulkWrite
47+ useSimpleCollation bool
48+ writes []mongo.ClientBulkWrite
4549}
4650
47- func newClientBulkWrite (size int ) * clientBulkWrite {
51+ func newClientBulkWrite (size int , useSimpleCollation bool ) * clientBulkWrite {
4852 return & clientBulkWrite {
49- make ([]mongo.ClientBulkWrite , 0 , size ),
53+ useSimpleCollation : useSimpleCollation ,
54+ writes : make ([]mongo.ClientBulkWrite , 0 , size ),
5055 }
5156}
5257
@@ -76,67 +81,93 @@ func (o *clientBulkWrite) Do(ctx context.Context, m *mongo.Client) (int, error)
7681}
7782
7883func (o * clientBulkWrite ) Insert (ns Namespace , event * InsertEvent ) {
84+ m := & mongo.ClientReplaceOneModel {
85+ Filter : event .DocumentKey ,
86+ Replacement : event .FullDocument ,
87+ Upsert : & yes ,
88+ }
89+
90+ if ns .Sharded && o .useSimpleCollation {
91+ m .Collation = simpleCollation
92+ }
93+
7994 bw := mongo.ClientBulkWrite {
8095 Database : ns .Database ,
8196 Collection : ns .Collection ,
82- Model : & mongo.ClientReplaceOneModel {
83- Filter : event .DocumentKey ,
84- Replacement : event .FullDocument ,
85- Upsert : & yes ,
86- },
97+ Model : m ,
8798 }
8899
89100 o .writes = append (o .writes , bw )
90101}
91102
92103func (o * clientBulkWrite ) Update (ns Namespace , event * UpdateEvent ) {
104+ m := & mongo.ClientUpdateOneModel {
105+ Filter : event .DocumentKey ,
106+ Update : collectUpdateOps (event ),
107+ }
108+
109+ if ns .Sharded && o .useSimpleCollation {
110+ m .Collation = simpleCollation
111+ }
112+
93113 bw := mongo.ClientBulkWrite {
94114 Database : ns .Database ,
95115 Collection : ns .Collection ,
96- Model : & mongo.ClientUpdateOneModel {
97- Filter : event .DocumentKey ,
98- Update : collectUpdateOps (event ),
99- },
116+ Model : m ,
100117 }
101118
102119 o .writes = append (o .writes , bw )
103120}
104121
105122func (o * clientBulkWrite ) Replace (ns Namespace , event * ReplaceEvent ) {
123+ m := & mongo.ClientReplaceOneModel {
124+ Filter : event .DocumentKey ,
125+ Replacement : event .FullDocument ,
126+ }
127+
128+ if ns .Sharded && o .useSimpleCollation {
129+ m .Collation = simpleCollation
130+ }
131+
106132 bw := mongo.ClientBulkWrite {
107133 Database : ns .Database ,
108134 Collection : ns .Collection ,
109- Model : & mongo.ClientReplaceOneModel {
110- Filter : event .DocumentKey ,
111- Replacement : event .FullDocument ,
112- },
135+ Model : m ,
113136 }
114137
115138 o .writes = append (o .writes , bw )
116139}
117140
118141func (o * clientBulkWrite ) Delete (ns Namespace , event * DeleteEvent ) {
142+ m := & mongo.ClientDeleteOneModel {
143+ Filter : event .DocumentKey ,
144+ }
145+
146+ if ns .Sharded && o .useSimpleCollation {
147+ m .Collation = simpleCollation
148+ }
149+
119150 bw := mongo.ClientBulkWrite {
120151 Database : ns .Database ,
121152 Collection : ns .Collection ,
122- Model : & mongo.ClientDeleteOneModel {
123- Filter : event .DocumentKey ,
124- },
153+ Model : m ,
125154 }
126155
127156 o .writes = append (o .writes , bw )
128157}
129158
130159type collectionBulkWrite struct {
131- max int
132- count int
133- writes map [Namespace ][]mongo.WriteModel
160+ useSimpleCollation bool
161+ max int
162+ count int
163+ writes map [Namespace ][]mongo.WriteModel
134164}
135165
136- func newCollectionBulkWrite (size int ) * collectionBulkWrite {
166+ func newCollectionBulkWrite (size int , nonDefaultCollationSupport bool ) * collectionBulkWrite {
137167 return & collectionBulkWrite {
138- max : size ,
139- writes : make (map [Namespace ][]mongo.WriteModel ),
168+ useSimpleCollation : nonDefaultCollationSupport ,
169+ max : size ,
170+ writes : make (map [Namespace ][]mongo.WriteModel ),
140171 }
141172}
142173
@@ -185,37 +216,61 @@ func (o *collectionBulkWrite) Do(ctx context.Context, m *mongo.Client) (int, err
185216}
186217
187218func (o * collectionBulkWrite ) Insert (ns Namespace , event * InsertEvent ) {
188- o . writes [ ns ] = append ( o . writes [ ns ], & mongo.ReplaceOneModel {
219+ m := & mongo.ReplaceOneModel {
189220 Filter : event .DocumentKey ,
190221 Replacement : event .FullDocument ,
191222 Upsert : & yes ,
192- })
223+ }
224+
225+ if ns .Sharded && o .useSimpleCollation {
226+ m .Collation = simpleCollation
227+ }
228+
229+ o .writes [ns ] = append (o .writes [ns ], m )
193230
194231 o .count ++
195232}
196233
197234func (o * collectionBulkWrite ) Update (ns Namespace , event * UpdateEvent ) {
198- o . writes [ ns ] = append ( o . writes [ ns ], & mongo.UpdateOneModel {
235+ m := & mongo.UpdateOneModel {
199236 Filter : event .DocumentKey ,
200237 Update : collectUpdateOps (event ),
201- })
238+ }
239+
240+ if ns .Sharded && o .useSimpleCollation {
241+ m .Collation = simpleCollation
242+ }
243+
244+ o .writes [ns ] = append (o .writes [ns ], m )
202245
203246 o .count ++
204247}
205248
206249func (o * collectionBulkWrite ) Replace (ns Namespace , event * ReplaceEvent ) {
207- o . writes [ ns ] = append ( o . writes [ ns ], & mongo.ReplaceOneModel {
250+ m := & mongo.ReplaceOneModel {
208251 Filter : event .DocumentKey ,
209252 Replacement : event .FullDocument ,
210- })
253+ }
254+
255+ if ns .Sharded && o .useSimpleCollation {
256+ m .Collation = simpleCollation
257+ }
258+
259+ o .writes [ns ] = append (o .writes [ns ], m )
211260
212261 o .count ++
213262}
214263
215264func (o * collectionBulkWrite ) Delete (ns Namespace , event * DeleteEvent ) {
216- o . writes [ ns ] = append ( o . writes [ ns ], & mongo.DeleteOneModel {
265+ m := & mongo.DeleteOneModel {
217266 Filter : event .DocumentKey ,
218- })
267+ }
268+
269+ if ns .Sharded && o .useSimpleCollation {
270+ m .Collation = simpleCollation
271+ }
272+
273+ o .writes [ns ] = append (o .writes [ns ], m )
219274
220275 o .count ++
221276}
0 commit comments