@@ -4766,6 +4766,58 @@ func (c *Collection) writeOp(op interface{}, ordered bool) (lerr *LastError, err
4766
4766
}
4767
4767
return & lerr , nil
4768
4768
}
4769
+ if updateOp , ok := op .(bulkUpdateOp ); ok && len (updateOp ) > 1000 {
4770
+ var lerr LastError
4771
+
4772
+ // Maximum batch size is 1000. Must split out in separate operations for compatibility.
4773
+ for i := 0 ; i < len (updateOp ); i += 1000 {
4774
+ l := i + 1000
4775
+ if l > len (updateOp ) {
4776
+ l = len (updateOp )
4777
+ }
4778
+
4779
+ oplerr , err := c .writeOpCommand (socket , safeOp , updateOp [i :l ], ordered , bypassValidation )
4780
+
4781
+ lerr .N += oplerr .N
4782
+ lerr .modified += oplerr .modified
4783
+ if err != nil {
4784
+ lerr .ecases = append (lerr .ecases , BulkErrorCase {i , err })
4785
+ if ordered {
4786
+ break
4787
+ }
4788
+ }
4789
+ }
4790
+ if len (lerr .ecases ) != 0 {
4791
+ return & lerr , lerr .ecases [0 ].Err
4792
+ }
4793
+ return & lerr , nil
4794
+ }
4795
+ if deleteOps , ok := op .(bulkDeleteOp ); ok && len (deleteOps ) > 1000 {
4796
+ var lerr LastError
4797
+
4798
+ // Maximum batch size is 1000. Must split out in separate operations for compatibility.
4799
+ for i := 0 ; i < len (deleteOps ); i += 1000 {
4800
+ l := i + 1000
4801
+ if l > len (deleteOps ) {
4802
+ l = len (deleteOps )
4803
+ }
4804
+
4805
+ oplerr , err := c .writeOpCommand (socket , safeOp , deleteOps [i :l ], ordered , bypassValidation )
4806
+
4807
+ lerr .N += oplerr .N
4808
+ lerr .modified += oplerr .modified
4809
+ if err != nil {
4810
+ lerr .ecases = append (lerr .ecases , BulkErrorCase {i , err })
4811
+ if ordered {
4812
+ break
4813
+ }
4814
+ }
4815
+ }
4816
+ if len (lerr .ecases ) != 0 {
4817
+ return & lerr , lerr .ecases [0 ].Err
4818
+ }
4819
+ return & lerr , nil
4820
+ }
4769
4821
return c .writeOpCommand (socket , safeOp , op , ordered , bypassValidation )
4770
4822
} else if updateOps , ok := op .(bulkUpdateOp ); ok {
4771
4823
var lerr LastError
0 commit comments