github.com/mdaxf/iac@v0.0.0-20240519030858-58a061660378/vendor_skip/go.mongodb.org/mongo-driver/mongo/bulk_write_models.go (about)

     1  // Copyright (C) MongoDB, Inc. 2017-present.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License"); you may
     4  // not use this file except in compliance with the License. You may obtain
     5  // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
     6  
     7  package mongo
     8  
     9  import (
    10  	"go.mongodb.org/mongo-driver/mongo/options"
    11  )
    12  
    13  // WriteModel is an interface implemented by models that can be used in a BulkWrite operation. Each WriteModel
    14  // represents a write.
    15  //
    16  // This interface is implemented by InsertOneModel, DeleteOneModel, DeleteManyModel, ReplaceOneModel, UpdateOneModel,
    17  // and UpdateManyModel. Custom implementations of this interface must not be used.
    18  type WriteModel interface {
    19  	writeModel()
    20  }
    21  
    22  // InsertOneModel is used to insert a single document in a BulkWrite operation.
    23  type InsertOneModel struct {
    24  	Document interface{}
    25  }
    26  
    27  // NewInsertOneModel creates a new InsertOneModel.
    28  func NewInsertOneModel() *InsertOneModel {
    29  	return &InsertOneModel{}
    30  }
    31  
    32  // SetDocument specifies the document to be inserted. The document cannot be nil. If it does not have an _id field when
    33  // transformed into BSON, one will be added automatically to the marshalled document. The original document will not be
    34  // modified.
    35  func (iom *InsertOneModel) SetDocument(doc interface{}) *InsertOneModel {
    36  	iom.Document = doc
    37  	return iom
    38  }
    39  
    40  func (*InsertOneModel) writeModel() {}
    41  
    42  // DeleteOneModel is used to delete at most one document in a BulkWriteOperation.
    43  type DeleteOneModel struct {
    44  	Filter    interface{}
    45  	Collation *options.Collation
    46  	Hint      interface{}
    47  }
    48  
    49  // NewDeleteOneModel creates a new DeleteOneModel.
    50  func NewDeleteOneModel() *DeleteOneModel {
    51  	return &DeleteOneModel{}
    52  }
    53  
    54  // SetFilter specifies a filter to use to select the document to delete. The filter must be a document containing query
    55  // operators. It cannot be nil. If the filter matches multiple documents, one will be selected from the matching
    56  // documents.
    57  func (dom *DeleteOneModel) SetFilter(filter interface{}) *DeleteOneModel {
    58  	dom.Filter = filter
    59  	return dom
    60  }
    61  
    62  // SetCollation specifies a collation to use for string comparisons. The default is nil, meaning no collation will be
    63  // used.
    64  func (dom *DeleteOneModel) SetCollation(collation *options.Collation) *DeleteOneModel {
    65  	dom.Collation = collation
    66  	return dom
    67  }
    68  
    69  // SetHint specifies the index to use for the operation. This should either be the index name as a string or the index
    70  // specification as a document. This option is only valid for MongoDB versions >= 4.4. Server versions >= 3.4 will
    71  // return an error if this option is specified. For server versions < 3.4, the driver will return a client-side error if
    72  // this option is specified. The driver will return an error if this option is specified during an unacknowledged write
    73  // operation. The driver will return an error if the hint parameter is a multi-key map. The default value is nil, which
    74  // means that no hint will be sent.
    75  func (dom *DeleteOneModel) SetHint(hint interface{}) *DeleteOneModel {
    76  	dom.Hint = hint
    77  	return dom
    78  }
    79  
    80  func (*DeleteOneModel) writeModel() {}
    81  
    82  // DeleteManyModel is used to delete multiple documents in a BulkWrite operation.
    83  type DeleteManyModel struct {
    84  	Filter    interface{}
    85  	Collation *options.Collation
    86  	Hint      interface{}
    87  }
    88  
    89  // NewDeleteManyModel creates a new DeleteManyModel.
    90  func NewDeleteManyModel() *DeleteManyModel {
    91  	return &DeleteManyModel{}
    92  }
    93  
    94  // SetFilter specifies a filter to use to select documents to delete. The filter must be a document containing query
    95  // operators. It cannot be nil.
    96  func (dmm *DeleteManyModel) SetFilter(filter interface{}) *DeleteManyModel {
    97  	dmm.Filter = filter
    98  	return dmm
    99  }
   100  
   101  // SetCollation specifies a collation to use for string comparisons. The default is nil, meaning no collation will be
   102  // used.
   103  func (dmm *DeleteManyModel) SetCollation(collation *options.Collation) *DeleteManyModel {
   104  	dmm.Collation = collation
   105  	return dmm
   106  }
   107  
   108  // SetHint specifies the index to use for the operation. This should either be the index name as a string or the index
   109  // specification as a document. This option is only valid for MongoDB versions >= 4.4. Server versions >= 3.4 will
   110  // return an error if this option is specified. For server versions < 3.4, the driver will return a client-side error if
   111  // this option is specified. The driver will return an error if this option is specified during an unacknowledged write
   112  // operation. The driver will return an error if the hint parameter is a multi-key map. The default value is nil, which
   113  // means that no hint will be sent.
   114  func (dmm *DeleteManyModel) SetHint(hint interface{}) *DeleteManyModel {
   115  	dmm.Hint = hint
   116  	return dmm
   117  }
   118  
   119  func (*DeleteManyModel) writeModel() {}
   120  
   121  // ReplaceOneModel is used to replace at most one document in a BulkWrite operation.
   122  type ReplaceOneModel struct {
   123  	Collation   *options.Collation
   124  	Upsert      *bool
   125  	Filter      interface{}
   126  	Replacement interface{}
   127  	Hint        interface{}
   128  }
   129  
   130  // NewReplaceOneModel creates a new ReplaceOneModel.
   131  func NewReplaceOneModel() *ReplaceOneModel {
   132  	return &ReplaceOneModel{}
   133  }
   134  
   135  // SetHint specifies the index to use for the operation. This should either be the index name as a string or the index
   136  // specification as a document. This option is only valid for MongoDB versions >= 4.2. Server versions >= 3.4 will
   137  // return an error if this option is specified. For server versions < 3.4, the driver will return a client-side error if
   138  // this option is specified. The driver will return an error if this option is specified during an unacknowledged write
   139  // operation. The driver will return an error if the hint parameter is a multi-key map. The default value is nil, which
   140  // means that no hint will be sent.
   141  func (rom *ReplaceOneModel) SetHint(hint interface{}) *ReplaceOneModel {
   142  	rom.Hint = hint
   143  	return rom
   144  }
   145  
   146  // SetFilter specifies a filter to use to select the document to replace. The filter must be a document containing query
   147  // operators. It cannot be nil. If the filter matches multiple documents, one will be selected from the matching
   148  // documents.
   149  func (rom *ReplaceOneModel) SetFilter(filter interface{}) *ReplaceOneModel {
   150  	rom.Filter = filter
   151  	return rom
   152  }
   153  
   154  // SetReplacement specifies a document that will be used to replace the selected document. It cannot be nil and cannot
   155  // contain any update operators (https://www.mongodb.com/docs/manual/reference/operator/update/).
   156  func (rom *ReplaceOneModel) SetReplacement(rep interface{}) *ReplaceOneModel {
   157  	rom.Replacement = rep
   158  	return rom
   159  }
   160  
   161  // SetCollation specifies a collation to use for string comparisons. The default is nil, meaning no collation will be
   162  // used.
   163  func (rom *ReplaceOneModel) SetCollation(collation *options.Collation) *ReplaceOneModel {
   164  	rom.Collation = collation
   165  	return rom
   166  }
   167  
   168  // SetUpsert specifies whether or not the replacement document should be inserted if no document matching the filter is
   169  // found. If an upsert is performed, the _id of the upserted document can be retrieved from the UpsertedIDs field of the
   170  // BulkWriteResult.
   171  func (rom *ReplaceOneModel) SetUpsert(upsert bool) *ReplaceOneModel {
   172  	rom.Upsert = &upsert
   173  	return rom
   174  }
   175  
   176  func (*ReplaceOneModel) writeModel() {}
   177  
   178  // UpdateOneModel is used to update at most one document in a BulkWrite operation.
   179  type UpdateOneModel struct {
   180  	Collation    *options.Collation
   181  	Upsert       *bool
   182  	Filter       interface{}
   183  	Update       interface{}
   184  	ArrayFilters *options.ArrayFilters
   185  	Hint         interface{}
   186  }
   187  
   188  // NewUpdateOneModel creates a new UpdateOneModel.
   189  func NewUpdateOneModel() *UpdateOneModel {
   190  	return &UpdateOneModel{}
   191  }
   192  
   193  // SetHint specifies the index to use for the operation. This should either be the index name as a string or the index
   194  // specification as a document. This option is only valid for MongoDB versions >= 4.2. Server versions >= 3.4 will
   195  // return an error if this option is specified. For server versions < 3.4, the driver will return a client-side error if
   196  // this option is specified. The driver will return an error if this option is specified during an unacknowledged write
   197  // operation. The driver will return an error if the hint parameter is a multi-key map. The default value is nil, which
   198  // means that no hint will be sent.
   199  func (uom *UpdateOneModel) SetHint(hint interface{}) *UpdateOneModel {
   200  	uom.Hint = hint
   201  	return uom
   202  }
   203  
   204  // SetFilter specifies a filter to use to select the document to update. The filter must be a document containing query
   205  // operators. It cannot be nil. If the filter matches multiple documents, one will be selected from the matching
   206  // documents.
   207  func (uom *UpdateOneModel) SetFilter(filter interface{}) *UpdateOneModel {
   208  	uom.Filter = filter
   209  	return uom
   210  }
   211  
   212  // SetUpdate specifies the modifications to be made to the selected document. The value must be a document containing
   213  // update operators (https://www.mongodb.com/docs/manual/reference/operator/update/). It cannot be nil or empty.
   214  func (uom *UpdateOneModel) SetUpdate(update interface{}) *UpdateOneModel {
   215  	uom.Update = update
   216  	return uom
   217  }
   218  
   219  // SetArrayFilters specifies a set of filters to determine which elements should be modified when updating an array
   220  // field.
   221  func (uom *UpdateOneModel) SetArrayFilters(filters options.ArrayFilters) *UpdateOneModel {
   222  	uom.ArrayFilters = &filters
   223  	return uom
   224  }
   225  
   226  // SetCollation specifies a collation to use for string comparisons. The default is nil, meaning no collation will be
   227  // used.
   228  func (uom *UpdateOneModel) SetCollation(collation *options.Collation) *UpdateOneModel {
   229  	uom.Collation = collation
   230  	return uom
   231  }
   232  
   233  // SetUpsert specifies whether or not a new document should be inserted if no document matching the filter is found. If
   234  // an upsert is performed, the _id of the upserted document can be retrieved from the UpsertedIDs field of the
   235  // BulkWriteResult.
   236  func (uom *UpdateOneModel) SetUpsert(upsert bool) *UpdateOneModel {
   237  	uom.Upsert = &upsert
   238  	return uom
   239  }
   240  
   241  func (*UpdateOneModel) writeModel() {}
   242  
   243  // UpdateManyModel is used to update multiple documents in a BulkWrite operation.
   244  type UpdateManyModel struct {
   245  	Collation    *options.Collation
   246  	Upsert       *bool
   247  	Filter       interface{}
   248  	Update       interface{}
   249  	ArrayFilters *options.ArrayFilters
   250  	Hint         interface{}
   251  }
   252  
   253  // NewUpdateManyModel creates a new UpdateManyModel.
   254  func NewUpdateManyModel() *UpdateManyModel {
   255  	return &UpdateManyModel{}
   256  }
   257  
   258  // SetHint specifies the index to use for the operation. This should either be the index name as a string or the index
   259  // specification as a document. This option is only valid for MongoDB versions >= 4.2. Server versions >= 3.4 will
   260  // return an error if this option is specified. For server versions < 3.4, the driver will return a client-side error if
   261  // this option is specified. The driver will return an error if this option is specified during an unacknowledged write
   262  // operation. The driver will return an error if the hint parameter is a multi-key map. The default value is nil, which
   263  // means that no hint will be sent.
   264  func (umm *UpdateManyModel) SetHint(hint interface{}) *UpdateManyModel {
   265  	umm.Hint = hint
   266  	return umm
   267  }
   268  
   269  // SetFilter specifies a filter to use to select documents to update. The filter must be a document containing query
   270  // operators. It cannot be nil.
   271  func (umm *UpdateManyModel) SetFilter(filter interface{}) *UpdateManyModel {
   272  	umm.Filter = filter
   273  	return umm
   274  }
   275  
   276  // SetUpdate specifies the modifications to be made to the selected documents. The value must be a document containing
   277  // update operators (https://www.mongodb.com/docs/manual/reference/operator/update/). It cannot be nil or empty.
   278  func (umm *UpdateManyModel) SetUpdate(update interface{}) *UpdateManyModel {
   279  	umm.Update = update
   280  	return umm
   281  }
   282  
   283  // SetArrayFilters specifies a set of filters to determine which elements should be modified when updating an array
   284  // field.
   285  func (umm *UpdateManyModel) SetArrayFilters(filters options.ArrayFilters) *UpdateManyModel {
   286  	umm.ArrayFilters = &filters
   287  	return umm
   288  }
   289  
   290  // SetCollation specifies a collation to use for string comparisons. The default is nil, meaning no collation will be
   291  // used.
   292  func (umm *UpdateManyModel) SetCollation(collation *options.Collation) *UpdateManyModel {
   293  	umm.Collation = collation
   294  	return umm
   295  }
   296  
   297  // SetUpsert specifies whether or not a new document should be inserted if no document matching the filter is found. If
   298  // an upsert is performed, the _id of the upserted document can be retrieved from the UpsertedIDs field of the
   299  // BulkWriteResult.
   300  func (umm *UpdateManyModel) SetUpsert(upsert bool) *UpdateManyModel {
   301  	umm.Upsert = &upsert
   302  	return umm
   303  }
   304  
   305  func (*UpdateManyModel) writeModel() {}