MongoDB C++ Driver  mongocxx-3.5.1
All Classes Namespaces Functions Typedefs Enumerations Enumerator Friends Pages
update_many.hpp
1 // Copyright 2014 MongoDB Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #pragma once
16 
17 #include <bsoncxx/array/view_or_value.hpp>
18 #include <bsoncxx/document/view_or_value.hpp>
19 #include <bsoncxx/stdx/optional.hpp>
20 #include <mongocxx/stdx.hpp>
21 
22 #include <mongocxx/config/prelude.hpp>
23 #include <mongocxx/pipeline.hpp>
24 
25 namespace mongocxx {
26 MONGOCXX_INLINE_NAMESPACE_BEGIN
27 
28 namespace model {
29 
33 class MONGOCXX_API update_many {
34  //
35  // Utility class supporting the convenience of {} meaning an empty bsoncxx::document.
36  //
37  // Users may not use this class directly.
38  //
39  // In places where driver methods take this class as a parameter, passing {} will
40  // translate to a default-constructed bsoncxx::document::view_or_value,
41  // regardless of other overloads taking other default-constructible types
42  // for that parameter. This class avoids compiler ambiguity with such overloads.
43  //
44  // See update_many() for an example of such overloads.
45  //
46  class _empty_doc_tag {
47  _empty_doc_tag() = default;
48  };
49 
50  public:
62 
72 
82  std::initializer_list<_empty_doc_tag> update);
83 
87 
93  const bsoncxx::document::view_or_value& filter() const;
94 
100  const bsoncxx::document::view_or_value& update() const;
101 
111  update_many& collation(bsoncxx::document::view_or_value collation);
112 
122  const stdx::optional<bsoncxx::document::view_or_value>& collation() const;
123 
137  update_many& upsert(bool upsert);
138 
144  const stdx::optional<bool>& upsert() const;
145 
154  update_many& array_filters(bsoncxx::array::view_or_value array_filters);
155 
164  const stdx::optional<bsoncxx::array::view_or_value>& array_filters() const;
165 
166  private:
169 
170  stdx::optional<bsoncxx::document::view_or_value> _collation;
171  stdx::optional<bsoncxx::array::view_or_value> _array_filters;
172  stdx::optional<bool> _upsert;
173 };
174 
175 } // namespace model
176 MONGOCXX_INLINE_NAMESPACE_END
177 } // namespace mongocxx
178 
179 #include <mongocxx/config/postlude.hpp>
Top level namespace for the MongoDB C++ driver.
Definition: bulk_write.hpp:24
Class representing a MongoDB update operation that modifies multiple documents.
Definition: update_many.hpp:33
Class representing a MongoDB aggregation pipeline.
Definition: pipeline.hpp:38