// Copyright 2014-present MongoDB Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace mongocxx { MONGOCXX_INLINE_NAMESPACE_BEGIN class client; class database; /// /// Class representing server side document groupings within a MongoDB database. /// /// Collections do not require or enforce a schema and documents inside of a collection can have /// different fields. While not a requirement, typically documents in a collection have a similar /// shape or related purpose. /// /// Example: /// @code /// // Connect and get a collection. /// mongocxx::client mongo_client{mongocxx::uri{}}; /// auto coll = mongo_client["database"]["collection"]; /// @endcode /// class MONGOCXX_API collection { // // Utility class supporting the convenience of {} meaning an empty bsoncxx::document. // // Users may not use this class directly. // // In places where driver methods take this class as a parameter, passing {} will // translate to a default-constructed bsoncxx::document::view_or_value, // regardless of other overloads taking other default-constructible types // for that parameter. This class avoids compiler ambiguity with such overloads. // // See collection::update_one for an example of such overloads. // class _empty_doc_tag { _empty_doc_tag() = default; }; public: /// /// Default constructs a collection object. The collection is /// equivalent to the state of a moved from collection. The only /// valid actions to take with a default constructed collection /// are to assign to it, or destroy it. /// collection() noexcept; /// /// Move constructs a collection. /// collection(collection&&) noexcept; /// /// Move assigns a collection. /// collection& operator=(collection&&) noexcept; /// /// Copy constructs a collection. /// collection(const collection&); /// /// Copy assigns a collection. /// collection& operator=(const collection&); /// /// Destroys a collection. /// ~collection(); /// /// Returns true if the collection is valid, meaning it was not /// default constructed or moved from. /// explicit operator bool() const noexcept; /// /// @{ /// /// Runs an aggregation framework pipeline against this collection. /// /// @param pipeline /// The pipeline of aggregation operations to perform. /// @param options /// Optional arguments, see mongocxx::options::aggregate. /// /// @return A mongocxx::cursor with the results. If the query fails, /// the cursor throws mongocxx::query_exception when the returned cursor /// is iterated. /// /// @see https://docs.mongodb.com/master/reference/command/aggregate/ /// /// @note /// In order to pass a read concern to this, you must use the /// collection level set read concern - collection::read_concern(rc). /// (Write concern supported only for MongoDB 3.4+). /// cursor aggregate(const pipeline& pipeline, const options::aggregate& options = options::aggregate()); /// /// Runs an aggregation framework pipeline against this collection. /// /// @param session /// The mongocxx::client_session with which to perform the aggregation. /// @param pipeline /// The pipeline of aggregation operations to perform. /// @param options /// Optional arguments, see mongocxx::options::aggregate. /// /// @return A mongocxx::cursor with the results. If the query fails, /// the cursor throws mongocxx::query_exception when the returned cursor /// is iterated. /// /// @see https://docs.mongodb.com/master/reference/command/aggregate/ /// /// @note /// In order to pass a read concern to this, you must use the /// collection level set read concern - collection::read_concern(rc). /// (Write concern supported only for MongoDB 3.4+). /// cursor aggregate(const client_session& session, const pipeline& pipeline, const options::aggregate& options = options::aggregate()); /// /// @} /// /// /// @{ /// /// Creates a new bulk operation to be executed against this collection. /// The lifetime of the bulk_write is independent of the collection. /// /// @param options /// Optional arguments; see mongocxx::options::bulk_write. /// /// @return /// The newly-created bulk write. /// class bulk_write create_bulk_write(const options::bulk_write& options = {}); /// /// Creates a new bulk operation to be executed against this collection. /// The lifetime of the bulk_write is independent of the collection. /// /// @param session /// The mongocxx::client_session with which to perform the bulk operation. /// @param options /// Optional arguments; see mongocxx::options::bulk_write. /// /// @return /// The newly-created bulk write. /// class bulk_write create_bulk_write(const client_session& session, const options::bulk_write& options = {}); /// /// @} /// /// /// @{ /// /// Sends a write to the server as a bulk write operation. /// /// @param write /// A model::write. /// @param options /// Optional arguments, see options::bulk_write. /// /// @return /// The optional result of the bulk operation execution. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @exception /// mongocxx::bulk_write_exception when there are errors processing /// the writes. /// /// @see mongocxx::bulk_write /// @see https://docs.mongodb.com/master/core/bulk-write-operations/ /// MONGOCXX_INLINE stdx::optional write( const model::write& write, const options::bulk_write& options = options::bulk_write()); /// /// Sends a write to the server as a bulk write operation. /// /// @param session /// The mongocxx::client_session with which to perform the bulk operation. /// @param write /// A model::write. /// @param options /// Optional arguments, see options::bulk_write. /// /// @return /// The optional result of the bulk operation execution. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @exception /// mongocxx::bulk_write_exception when there are errors processing /// the writes. /// /// @see mongocxx::bulk_write /// @see https://docs.mongodb.com/master/core/bulk-write-operations/ /// MONGOCXX_INLINE stdx::optional write( const client_session& session, const model::write& write, const options::bulk_write& options = options::bulk_write()); /// /// @} /// /// /// @{ /// /// Sends a container of writes to the server as a bulk write operation. /// /// @tparam container_type /// The container type. Must meet the requirements for the container concept with a value /// type of model::write. /// /// @param writes /// A container of model::write. /// @param options /// Optional arguments, see options::bulk_write. /// /// @return The optional result of the bulk operation execution. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception when there are errors processing the writes. /// /// @see mongocxx::bulk_write /// @see https://docs.mongodb.com/master/core/bulk-write-operations/ /// template MONGOCXX_INLINE stdx::optional bulk_write( const container_type& writes, const options::bulk_write& options = options::bulk_write()); /// /// Sends a container of writes to the server as a bulk write operation. /// /// @tparam container_type /// The container type. Must meet the requirements for the container concept with a value /// type of model::write. /// /// @param session /// The mongocxx::client_session with which to perform the bulk operation. /// @param writes /// A container of model::write. /// @param options /// Optional arguments, see options::bulk_write. /// /// @return The optional result of the bulk operation execution. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception when there are errors processing the writes. /// /// @see mongocxx::bulk_write /// @see https://docs.mongodb.com/master/core/bulk-write-operations/ /// template MONGOCXX_INLINE stdx::optional bulk_write( const client_session& session, const container_type& writes, const options::bulk_write& options = options::bulk_write()); /// /// @} /// /// /// @{ /// /// Sends writes starting at @c begin and ending at @c end to the server as a bulk write /// operation. /// /// @tparam write_model_iterator_type /// The container type. Must meet the requirements for the input iterator concept with a value /// type of model::write. /// /// @param begin /// Iterator pointing to the first model::write to send. /// @param end /// Iterator pointing to the end of the writes to send. /// @param options /// Optional arguments, see options::bulk_write. /// /// @return The optional result of the bulk operation execution, a result::bulk_write. /// /// @throws mongocxx::bulk_write_exception when there are errors processing the writes. /// /// @see mongocxx::bulk_write /// @see https://docs.mongodb.com/master/core/bulk-write-operations/ /// template MONGOCXX_INLINE stdx::optional bulk_write( write_model_iterator_type begin, write_model_iterator_type end, const options::bulk_write& options = options::bulk_write()); /// /// Sends writes starting at @c begin and ending at @c end to the server as a bulk write /// operation. /// /// @tparam write_model_iterator_type /// The container type. Must meet the requirements for the input iterator concept with a value /// type of model::write. /// /// @param session /// The mongocxx::client_session with which to perform the bulk operation. /// @param begin /// Iterator pointing to the first model::write to send. /// @param end /// Iterator pointing to the end of the writes to send. /// @param options /// Optional arguments, see options::bulk_write. /// /// @return The optional result of the bulk operation execution, a result::bulk_write. /// /// @throws mongocxx::bulk_write_exception when there are errors processing the writes. /// /// @see mongocxx::bulk_write /// @see https://docs.mongodb.com/master/core/bulk-write-operations/ /// template MONGOCXX_INLINE stdx::optional bulk_write( const client_session& session, write_model_iterator_type begin, write_model_iterator_type end, const options::bulk_write& options = options::bulk_write()); /// /// @} /// /// /// @{ /// /// Counts the number of documents matching the provided filter. /// /// @param filter /// The filter that documents must match in order to be counted. /// @param options /// Optional arguments, see mongocxx::options::count. /// /// @return The count of the documents that matched the filter. /// /// @throws mongocxx::query_exception if the count operation fails. /// std::int64_t count_documents(bsoncxx::document::view_or_value filter, const options::count& options = options::count()); /// /// Counts the number of documents matching the provided filter. /// /// @param session /// The mongocxx::client_session with which to perform the count. /// @param filter /// The filter that documents must match in order to be counted. /// @param options /// Optional arguments, see mongocxx::options::count. /// /// @return The count of the documents that matched the filter. /// /// @throws mongocxx::query_exception if the count operation fails. /// std::int64_t count_documents(const client_session& session, bsoncxx::document::view_or_value filter, const options::count& options = options::count()); /// /// @} /// /// /// @{ /// /// Returns an estimate of the number of documents in the collection. /// /// @param options /// Optional arguments, see mongocxx::options::count. /// /// @return The count of the documents that matched the filter. /// /// @throws mongocxx::query_exception if the count operation fails. /// std::int64_t estimated_document_count( const options::estimated_document_count& options = options::estimated_document_count()); /// /// @} /// /// /// @{ /// /// Creates an index over the collection for the provided keys with the provided options. /// /// @param keys /// The keys for the index: @c {a: 1, b: -1} /// @param index_options /// A document containing optional arguments for creating the index. /// @param operation_options /// Optional arguments for the overall operation, see mongocxx::options::index_view. /// /// @exception /// mongocxx::operation_exception if index creation fails. /// /// @see /// https://docs.mongodb.com/master/reference/command/createIndexes/ /// /// @note /// Write concern supported only for MongoDB 3.4+. /// bsoncxx::document::value create_index( bsoncxx::document::view_or_value keys, bsoncxx::document::view_or_value index_options = {}, options::index_view operation_options = options::index_view{}); /// /// Creates an index over the collection for the provided keys with the provided options. /// /// @param session /// The mongocxx::client_session with which to perform the index creation. /// @param keys /// The keys for the index: @c {a: 1, b: -1} /// @param index_options /// A document containing optional arguments for creating the index. /// @param operation_options /// Optional arguments for the overall operation, see mongocxx::options::index_view. /// /// @exception /// mongocxx::operation_exception if index creation fails. /// /// @see /// https://docs.mongodb.com/master/reference/command/createIndexes/ /// /// @note /// Write concern supported only for MongoDB 3.4+. /// bsoncxx::document::value create_index( const client_session& session, bsoncxx::document::view_or_value keys, bsoncxx::document::view_or_value index_options = {}, options::index_view operation_options = options::index_view{}); /// /// @} /// /// /// @{ /// /// Deletes all matching documents from the collection. /// /// @param filter /// Document view representing the data to be deleted. /// @param options /// Optional arguments, see mongocxx::options::delete_options. /// /// @return The optional result of performing the deletion. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception if the delete fails. /// /// @see https://docs.mongodb.com/master/reference/command/delete/ /// stdx::optional delete_many( bsoncxx::document::view_or_value filter, const options::delete_options& options = options::delete_options()); /// /// Deletes all matching documents from the collection. /// /// @param session /// The mongocxx::client_session with which to perform the deletion. /// @param filter /// Document view representing the data to be deleted. /// @param options /// Optional arguments, see mongocxx::options::delete_options. /// /// @return The optional result of performing the deletion. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception if the delete fails. /// /// @see https://docs.mongodb.com/master/reference/command/delete/ /// stdx::optional delete_many( const client_session& session, bsoncxx::document::view_or_value filter, const options::delete_options& options = options::delete_options()); /// /// @} /// /// /// @{ /// /// Deletes a single matching document from the collection. /// /// @param filter /// Document view representing the data to be deleted. /// @param options /// Optional arguments, see mongocxx::options::delete_options. /// /// @return The optional result of performing the deletion. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception if the delete fails. /// /// @see https://docs.mongodb.com/master/reference/command/delete/ /// stdx::optional delete_one( bsoncxx::document::view_or_value filter, const options::delete_options& options = options::delete_options()); /// /// Deletes a single matching document from the collection. /// /// @param session /// The mongocxx::client_session with which to perform the deletion. /// @param filter /// Document view representing the data to be deleted. /// @param options /// Optional arguments, see mongocxx::options::delete_options. /// /// @return The optional result of performing the deletion. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception if the delete fails. /// /// @see https://docs.mongodb.com/master/reference/command/delete/ /// stdx::optional delete_one( const client_session& session, bsoncxx::document::view_or_value filter, const options::delete_options& options = options::delete_options()); /// /// @} /// /// /// @{ /// /// Finds the distinct values for a specified field across the collection. /// /// @param name /// The field for which the distinct values will be found. /// @param filter /// Document view representing the documents for which the distinct operation will apply. /// @param options /// Optional arguments, see options::distinct. /// @return mongocxx::cursor having the distinct values for the specified /// field. If the operation fails, the cursor throws /// mongocxx::query_exception when the returned cursor is iterated. /// @see https://docs.mongodb.com/master/reference/command/distinct/ /// cursor distinct(bsoncxx::string::view_or_value name, bsoncxx::document::view_or_value filter, const options::distinct& options = options::distinct()); /// /// Finds the distinct values for a specified field across the collection. /// /// @param session /// The mongocxx::client_session with which to perform the operation. /// @param name /// The field for which the distinct values will be found. /// @param filter /// Document view representing the documents for which the distinct operation will apply. /// @param options /// Optional arguments, see options::distinct. /// @return mongocxx::cursor having the distinct values for the specified /// field. If the operation fails, the cursor throws /// mongocxx::query_exception when the returned cursor is iterated. /// @see https://docs.mongodb.com/master/reference/command/distinct/ /// cursor distinct(const client_session& session, bsoncxx::string::view_or_value name, bsoncxx::document::view_or_value filter, const options::distinct& options = options::distinct()); /// /// @} /// /// /// @{ /// /// Drops this collection and all its contained documents from the database. /// /// @param write_concern (optional) /// The write concern to use for this operation. Defaults to the collection wide write /// concern if none is provided. /// /// @exception /// mongocxx::operation_exception if the operation fails. /// /// @see /// https://docs.mongodb.com/master/reference/command/drop/ /// /// @note /// Write concern supported only for MongoDB 3.4+. /// void drop(const bsoncxx::stdx::optional& write_concern = {}); /// /// Drops this collection and all its contained documents from the database. /// /// @param session /// The mongocxx::client_session with which to perform the drop. /// @param write_concern (optional) /// The write concern to use for this operation. Defaults to the collection wide write /// concern if none is provided. /// /// @exception /// mongocxx::operation_exception if the operation fails. /// /// @see /// https://docs.mongodb.com/master/reference/command/drop/ /// /// @note /// Write concern supported only for MongoDB 3.4+. /// void drop(const client_session& session, const bsoncxx::stdx::optional& write_concern = {}); /// /// @} /// /// /// @{ /// /// Finds the documents in this collection which match the provided filter. /// /// @param filter /// Document view representing a document that should match the query. /// @param options /// Optional arguments, see options::find /// /// @return A mongocxx::cursor with the results. If the query fails, /// the cursor throws mongocxx::query_exception when the returned cursor /// is iterated. /// /// @throws mongocxx::logic_error if the options are invalid, or if the unsupported option /// modifiers "$query" or "$explain" are used. /// /// @see https://docs.mongodb.com/master/core/read-operations-introduction/ /// cursor find(bsoncxx::document::view_or_value filter, const options::find& options = options::find()); /// /// Finds the documents in this collection which match the provided filter. /// /// @param session /// The mongocxx::client_session with which to perform the query. /// @param filter /// Document view representing a document that should match the query. /// @param options /// Optional arguments, see options::find /// /// @return A mongocxx::cursor with the results. If the query fails, /// the cursor throws mongocxx::query_exception when the returned cursor /// is iterated. /// /// @throws mongocxx::logic_error if the options are invalid, or if the unsupported option /// modifiers "$query" or "$explain" are used. /// /// @see https://docs.mongodb.com/master/core/read-operations-introduction/ /// cursor find(const client_session& session, bsoncxx::document::view_or_value filter, const options::find& options = options::find()); /// /// @{ /// /// Finds a single document in this collection that match the provided filter. /// /// @param filter /// Document view representing a document that should match the query. /// @param options /// Optional arguments, see options::find /// /// @return An optional document that matched the filter. /// /// @throws mongocxx::query_exception if the operation fails. /// /// @see https://docs.mongodb.com/master/core/read-operations-introduction/ /// stdx::optional find_one( bsoncxx::document::view_or_value filter, const options::find& options = options::find()); /// /// Finds a single document in this collection that match the provided filter. /// /// @param session /// The mongocxx::client_session with which to perform the query. /// @param filter /// Document view representing a document that should match the query. /// @param options /// Optional arguments, see options::find /// /// @return An optional document that matched the filter. /// /// @throws mongocxx::query_exception if the operation fails. /// /// @see https://docs.mongodb.com/master/core/read-operations-introduction/ /// stdx::optional find_one( const client_session& session, bsoncxx::document::view_or_value filter, const options::find& options = options::find()); /// /// @} /// /// /// @{ /// /// Finds a single document matching the filter, deletes it, and returns the original. /// /// @param filter /// Document view representing a document that should be deleted. /// @param options /// Optional arguments, see options::find_one_and_delete /// /// @return The document that was deleted. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_delete( bsoncxx::document::view_or_value filter, const options::find_one_and_delete& options = options::find_one_and_delete()); /// /// Finds a single document matching the filter, deletes it, and returns the original. /// /// @param session /// The mongocxx::client_session with which to perform the operation. /// @param filter /// Document view representing a document that should be deleted. /// @param options /// Optional arguments, see options::find_one_and_delete /// /// @return The document that was deleted. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_delete( const client_session& session, bsoncxx::document::view_or_value filter, const options::find_one_and_delete& options = options::find_one_and_delete()); /// /// @} /// /// /// @{ /// /// Finds a single document matching the filter, replaces it, and returns either the original /// or the replacement document. /// /// @param filter /// Document view representing a document that should be replaced. /// @param replacement /// Document view representing the replacement for a matching document. /// @param options /// Optional arguments, see options::find_one_and_replace. /// /// @return The original or replaced document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_replace( bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value replacement, const options::find_one_and_replace& options = options::find_one_and_replace()); /// /// Finds a single document matching the filter, replaces it, and returns either the original /// or the replacement document. /// /// @param session /// The mongocxx::client_session with which to perform the operation. /// @param filter /// Document view representing a document that should be replaced. /// @param replacement /// Document view representing the replacement for a matching document. /// @param options /// Optional arguments, see options::find_one_and_replace. /// /// @return The original or replaced document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_replace( const client_session& session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value replacement, const options::find_one_and_replace& options = options::find_one_and_replace()); /// /// @} /// /// /// @{ /// /// Finds a single document matching the filter, updates it, and returns either the original /// or the newly-updated document. /// /// @param filter /// Document view representing a document that should be updated. /// @param update /// Document view representing the update to apply to a matching document. /// @param options /// Optional arguments, see options::find_one_and_update. /// /// @return The original or updated document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_update( bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::find_one_and_update& options = options::find_one_and_update()); /// /// Finds a single document matching the filter, updates it, and returns either the original /// or the newly-updated document. /// /// @param filter /// Document view representing a document that should be updated. /// @param update /// Pipeline representing the update to apply to a matching document. /// @param options /// Optional arguments, see options::find_one_and_update. /// /// @return The original or updated document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_update( bsoncxx::document::view_or_value filter, const pipeline& update, const options::find_one_and_update& options = options::find_one_and_update()); /// /// Finds a single document matching the filter, updates it, and returns either the original /// or the newly-updated document. /// /// @param filter /// Document view representing a document that should be updated. /// @param update /// Supports the empty update {}. /// @param options /// Optional arguments, see options::find_one_and_update. /// /// @return The original or updated document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_update( bsoncxx::document::view_or_value filter, std::initializer_list<_empty_doc_tag> update, const options::find_one_and_update& options = options::find_one_and_update()); /// /// Finds a single document matching the filter, updates it, and returns either the original /// or the newly-updated document. /// /// @param session /// The mongocxx::client_session with which to perform the operation. /// @param filter /// Document view representing a document that should be updated. /// @param update /// Document view representing the update to apply to a matching document. /// @param options /// Optional arguments, see options::find_one_and_update. /// /// @return The original or updated document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_update( const client_session& session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::find_one_and_update& options = options::find_one_and_update()); /// /// Finds a single document matching the filter, updates it, and returns either the original /// or the newly-updated document. /// /// @param session /// The mongocxx::client_session with which to perform the operation. /// @param filter /// Document view representing a document that should be updated. /// @param update /// Pipeline representing the update to apply to a matching document. /// @param options /// Optional arguments, see options::find_one_and_update. /// /// @return The original or updated document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_update( const client_session& session, bsoncxx::document::view_or_value filter, const pipeline& update, const options::find_one_and_update& options = options::find_one_and_update()); /// /// Finds a single document matching the filter, updates it, and returns either the original /// or the newly-updated document. /// /// @param session /// The mongocxx::client_session with which to perform the operation. /// @param filter /// Document view representing a document that should be updated. /// @param update /// Supports the empty update {}. /// @param options /// Optional arguments, see options::find_one_and_update. /// /// @return The original or updated document. /// /// @exception /// Throws mongocxx::logic_error if the collation option is specified and an unacknowledged /// write concern is used. /// /// @exception /// Throws mongocxx::write_exception if the operation fails. /// stdx::optional find_one_and_update( const client_session& session, bsoncxx::document::view_or_value filter, std::initializer_list<_empty_doc_tag> update, const options::find_one_and_update& options = options::find_one_and_update()); /// /// @} /// /// /// @{ /// /// Inserts a single document into the collection. If the document is missing an identifier /// (@c _id field) one will be generated for it. /// /// @param document /// The document to insert. /// @param options /// Optional arguments, see options::insert. /// /// @return The optional result of attempting to perform the insert. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception if the operation fails. stdx::optional insert_one(bsoncxx::document::view_or_value document, const options::insert& options = {}); /// /// Inserts a single document into the collection. If the document is missing an identifier /// (@c _id field) one will be generated for it. /// /// @param session /// The mongocxx::client_session with which to perform the insert. /// @param document /// The document to insert. /// @param options /// Optional arguments, see options::insert. /// /// @return The optional result of attempting to perform the insert. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception if the operation fails. stdx::optional insert_one(const client_session& session, bsoncxx::document::view_or_value document, const options::insert& options = {}); /// /// @} /// /// /// @{ /// /// Inserts multiple documents into the collection. If any of the documents are missing /// identifiers the driver will generate them. /// /// @warning This method uses the bulk insert command to execute the insertion as opposed to /// the legacy OP_INSERT wire protocol message. As a result, using this method to insert many /// documents on MongoDB < 2.6 will be slow. /// /// @tparam container_type /// The container type. Must meet the requirements for the container concept with a value /// type of model::write. /// /// @param container /// Container of a documents to insert. /// @param options /// Optional arguments, see options::insert. /// /// @return The optional result of attempting to performing the insert. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception when the operation fails. /// template MONGOCXX_INLINE stdx::optional insert_many( const container_type& container, const options::insert& options = options::insert()); /// /// Inserts multiple documents into the collection. If any of the documents are missing /// identifiers the driver will generate them. /// /// @tparam container_type /// The container type. Must meet the requirements for the container concept with a value /// type of model::write. /// /// @param session /// The mongocxx::client_session with which to perform the inserts. /// @param container /// Container of a documents to insert. /// @param options /// Optional arguments, see options::insert. /// /// @return The optional result of attempting to performing the insert. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws mongocxx::bulk_write_exception when the operation fails. /// template MONGOCXX_INLINE stdx::optional insert_many( const client_session& session, const container_type& container, const options::insert& options = options::insert()); /// /// @{ /// /// Inserts multiple documents into the collection. If any of the documents are missing /// identifiers the driver will generate them. /// /// @warning This method uses the bulk insert command to execute the insertion as opposed to /// the legacy OP_INSERT wire protocol message. As a result, using this method to insert many /// documents on MongoDB < 2.6 will be slow. /// /// @tparam document_view_iterator_type /// The iterator type. Must meet the requirements for the input iterator concept with a value /// type of bsoncxx::document::view. /// /// @param begin /// Iterator pointing to the first document to be inserted. /// @param end /// Iterator pointing to the end of the documents to be inserted. /// @param options /// Optional arguments, see options::insert. /// /// @return The result of attempting to performing the insert. /// /// @throws mongocxx::bulk_write_exception if the operation fails. /// template MONGOCXX_INLINE stdx::optional insert_many( document_view_iterator_type begin, document_view_iterator_type end, const options::insert& options = options::insert()); /// /// Inserts multiple documents into the collection. If any of the documents are missing /// identifiers the driver will generate them. /// /// @tparam document_view_iterator_type /// The iterator type. Must meet the requirements for the input iterator concept with a value /// type of bsoncxx::document::view. /// /// @param session /// The mongocxx::client_session with which to perform the inserts. /// @param begin /// Iterator pointing to the first document to be inserted. /// @param end /// Iterator pointing to the end of the documents to be inserted. /// @param options /// Optional arguments, see options::insert. /// /// @return The result of attempting to performing the insert. /// /// @throws mongocxx::bulk_write_exception if the operation fails. /// template MONGOCXX_INLINE stdx::optional insert_many( const client_session& session, document_view_iterator_type begin, document_view_iterator_type end, const options::insert& options = options::insert()); /// /// @} /// /// /// @{ /// /// Returns a list of the indexes currently on this collection. /// /// @return Cursor yielding the index specifications. /// /// @throws mongocxx::operation_exception if the operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/listIndexes/ /// cursor list_indexes() const; /// /// Returns a list of the indexes currently on this collection. /// /// @param session /// The mongocxx::client_session with which to perform the operation. /// /// @return Cursor yielding the index specifications. /// /// @throws mongocxx::operation_exception if the operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/listIndexes/ /// cursor list_indexes(const client_session& session) const; /// /// @} /// /// /// Returns the name of this collection. /// /// @return The name of the collection. The return value of this method is invalidated by any /// subsequent call to collection::rename() on this collection object. /// stdx::string_view name() const; /// /// Rename this collection. /// /// @param new_name The new name to assign to the collection. /// @param drop_target_before_rename Whether to overwrite any /// existing collections called new_name. The default is false. /// @param write_concern (optional) /// The write concern to use for this operation. Defaults to the collection wide write /// concern if none is provided. /// /// @exception /// mongocxx::operation_exception if the operation fails. /// /// @see /// https://docs.mongodb.com/master/reference/command/renameCollection/ /// /// @note /// Write concern supported only for MongoDB 3.4+. /// void rename(bsoncxx::string::view_or_value new_name, bool drop_target_before_rename = false, const bsoncxx::stdx::optional& write_concern = {}); /// /// Rename this collection. /// /// @param session /// The mongocxx::client_session with which to perform the rename. /// @param new_name The new name to assign to the collection. /// @param drop_target_before_rename Whether to overwrite any /// existing collections called new_name. The default is false. /// @param write_concern (optional) /// The write concern to use for this operation. Defaults to the collection wide write /// concern if none is provided. /// /// @exception /// mongocxx::operation_exception if the operation fails. /// /// @see /// https://docs.mongodb.com/master/reference/command/renameCollection/ /// /// @note /// Write concern supported only for MongoDB 3.4+. /// void rename(const client_session& session, bsoncxx::string::view_or_value new_name, bool drop_target_before_rename = false, const bsoncxx::stdx::optional& write_concern = {}); /// /// @} /// /// /// Sets the read_concern for this collection. Changes will not have any effect on existing /// cursors or other read operations which use the previously-set read concern. /// /// @param rc /// The new @c read_concern /// /// @see https://docs.mongodb.com/master/reference/read-concern/ /// void read_concern(class read_concern rc); /// /// Gets the read_concern for the collection. /// /// If a read_concern has not been explicitly set for this collection object, it inherits /// the read_concern from its parent database or client object. /// /// @return The current read_concern. /// class read_concern read_concern() const; /// /// Sets the read_preference for this collection. Changes will not have any effect on existing /// cursors or other read operations which use the read preference. /// /// @param rp /// The read_preference to set. /// /// @see https://docs.mongodb.com/master/core/read-preference/ /// void read_preference(class read_preference rp); /// /// Gets the read_preference for the collection. /// /// @return The current read_preference. /// /// @see https://docs.mongodb.com/master/core/read-preference/ /// class read_preference read_preference() const; /// /// @{ /// /// Replaces a single document matching the provided filter in this collection. /// /// @param filter /// Document representing the match criteria. /// @param replacement /// The replacement document. /// @param options /// Optional arguments, see options::replace. /// /// @return The optional result of attempting to replace a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the replacement is invalid, or mongocxx::bulk_write_exception if /// the operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional replace_one( bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value replacement, const options::replace& options = options::replace{}); /// /// Replaces a single document matching the provided filter in this collection. /// /// @param session /// The mongocxx::client_session with which to perform the replace. /// @param filter /// Document representing the match criteria. /// @param replacement /// The replacement document. /// @param options /// Optional arguments, see options::replace. /// /// @return The optional result of attempting to replace a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the replacement is invalid, or mongocxx::bulk_write_exception if /// the operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional replace_one( const client_session& session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value replacement, const options::replace& options = options::replace{}); /// /// @{ /// /// Updates multiple documents matching the provided filter in this collection. /// /// @param filter /// Document representing the match criteria. /// @param update /// Document representing the update to be applied to matching documents. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update multiple documents. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_many(bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::update& options = options::update()); /// /// Updates multiple documents matching the provided filter in this collection. /// /// @param filter /// Document representing the match criteria. /// @param update /// Pipeline representing the update to be applied to matching documents. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update multiple documents. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_many(bsoncxx::document::view_or_value filter, const pipeline& update, const options::update& options = options::update()); /// /// Updates multiple documents matching the provided filter in this collection. /// /// @param filter /// Document representing the match criteria. /// @param update /// Supports the empty update {}. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update multiple documents. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_many(bsoncxx::document::view_or_value filter, std::initializer_list<_empty_doc_tag> update, const options::update& options = options::update()); /// /// Updates multiple documents matching the provided filter in this collection. /// /// @param session /// The mongocxx::client_session with which to perform the update. /// @param filter /// Document representing the match criteria. /// @param update /// Document representing the update to be applied to matching documents. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update multiple documents. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_many(const client_session& session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::update& options = options::update()); /// /// Updates multiple documents matching the provided filter in this collection. /// /// @param session /// The mongocxx::client_session with which to perform the update. /// @param filter /// Document representing the match criteria. /// @param update /// Pipeline representing the update to be applied to matching documents. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update multiple documents. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_many(const client_session& session, bsoncxx::document::view_or_value filter, const pipeline& update, const options::update& options = options::update()); /// /// Updates multiple documents matching the provided filter in this collection. /// /// @param session /// The mongocxx::client_session with which to perform the update. /// @param filter /// Document representing the match criteria. /// @param update /// Supports the empty update {}. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update multiple documents. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_many(const client_session& session, bsoncxx::document::view_or_value filter, std::initializer_list<_empty_doc_tag> update, const options::update& options = options::update()); /// /// @} /// /// /// @{ /// /// Updates a single document matching the provided filter in this collection. /// /// @param filter /// Document representing the match criteria. /// @param update /// Document representing the update to be applied to a matching document. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_one(bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::update& options = options::update()); /// /// Updates a single document matching the provided filter in this collection. /// /// @param filter /// Document representing the match criteria. /// @param update /// Pipeline representing the update to be applied to a matching document. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_one(bsoncxx::document::view_or_value filter, const pipeline& update, const options::update& options = options::update()); /// /// Updates a single document matching the provided filter in this collection. /// /// @param filter /// Document representing the match criteria. /// @param update /// Supports the empty update {}. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_one(bsoncxx::document::view_or_value filter, std::initializer_list<_empty_doc_tag> update, const options::update& options = options::update()); /// /// Updates a single document matching the provided filter in this collection. /// /// @param session /// The mongocxx::client_session with which to perform the update. /// @param filter /// Document representing the match criteria. /// @param update /// Document representing the update to be applied to a matching document. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_one(const client_session& session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::update& options = options::update()); /// /// Updates a single document matching the provided filter in this collection. /// /// @param session /// The mongocxx::client_session with which to perform the update. /// @param filter /// Document representing the match criteria. /// @param update /// Pipeline representing the update to be applied to a matching document. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_one(const client_session& session, bsoncxx::document::view_or_value filter, const pipeline& update, const options::update& options = options::update()); /// /// Updates a single document matching the provided filter in this collection. /// /// @param session /// The mongocxx::client_session with which to perform the update. /// @param filter /// Document representing the match criteria. /// @param update /// Supports the empty update {}. /// @param options /// Optional arguments, see options::update. /// /// @return The optional result of attempting to update a document. /// If the write concern is unacknowledged, the optional will be /// disengaged. /// /// @throws /// mongocxx::logic_error if the update is invalid, or mongocxx::bulk_write_exception if the /// operation fails. /// /// @see https://docs.mongodb.com/master/reference/command/update/ /// stdx::optional update_one(const client_session& session, bsoncxx::document::view_or_value filter, std::initializer_list<_empty_doc_tag> update, const options::update& options = options::update()); /// /// @} /// /// /// Sets the write_concern for this collection. Changes will not have any effect on existing /// write operations. /// /// @param wc /// The new write_concern to use. /// void write_concern(class write_concern wc); /// /// Gets the write_concern for the collection. /// /// @return The current write_concern. /// class write_concern write_concern() const; /// /// Gets an index_view to the collection. index_view indexes(); /// /// @{ /// /// Gets a change stream on this collection with an empty pipeline. /// Change streams are only supported with a "majority" read concern or no read concern. /// /// @param options /// The options to use when creating the change stream. /// /// @return /// A change stream on this collection. /// /// @see https://docs.mongodb.com/manual/changeStreams/ /// change_stream watch(const options::change_stream& options = {}); /// /// @param session /// The mongocxx::client_session with which to perform the watch operation. /// @param options /// The options to use when creating the change stream. /// /// @return /// A change stream on this collection. /// /// @see https://docs.mongodb.com/manual/changeStreams/ /// change_stream watch(const client_session& session, const options::change_stream& options = {}); /// /// Gets a change stream on this collection. /// Change streams are only supported with a "majority" read concern or no read concern. /// /// @param pipe /// The aggregation pipeline to be used on the change notifications. /// Only a subset of pipeline operations are supported for change streams. For more /// information see the change streams documentation. /// @param options /// The options to use when creating the change stream. /// /// @return /// A change stream on this collection. /// /// @see https://docs.mongodb.com/manual/changeStreams/ /// change_stream watch(const pipeline& pipe, const options::change_stream& options = {}); /// /// Gets a change stream on this collection. /// /// @param session /// The mongocxx::client_session with which to perform the watch operation. /// @param pipe /// The aggregation pipeline to be used on the change notifications. /// @param options /// The options to use when creating the change stream. /// /// @return /// A change stream on this collection. /// /// @see https://docs.mongodb.com/manual/changeStreams/ /// change_stream watch(const client_session& session, const pipeline& pipe, const options::change_stream& options = {}); /// /// @} /// private: friend class bulk_write; friend class database; MONGOCXX_PRIVATE collection(const database& database, bsoncxx::string::view_or_value collection_name); MONGOCXX_PRIVATE collection(const database& database, void* collection); MONGOCXX_PRIVATE cursor _aggregate(const client_session* session, const pipeline& pipeline, const options::aggregate& options); MONGOCXX_PRIVATE std::int64_t _count(const client_session* session, bsoncxx::document::view_or_value filter, const options::count& options); MONGOCXX_PRIVATE std::int64_t _count_documents(const client_session* session, bsoncxx::document::view_or_value filter, const options::count& options); MONGOCXX_PRIVATE bsoncxx::document::value _create_index( const client_session* session, bsoncxx::document::view_or_value keys, bsoncxx::document::view_or_value index_options, options::index_view operation_options); MONGOCXX_PRIVATE stdx::optional _delete_many( const client_session* session, bsoncxx::document::view_or_value filter, const options::delete_options& options); MONGOCXX_PRIVATE stdx::optional _delete_one( const client_session* session, bsoncxx::document::view_or_value filter, const options::delete_options& options); MONGOCXX_PRIVATE cursor _distinct(const client_session* session, bsoncxx::string::view_or_value name, bsoncxx::document::view_or_value filter, const options::distinct& options); MONGOCXX_PRIVATE void _drop( const client_session* session, const bsoncxx::stdx::optional& write_concern); MONGOCXX_PRIVATE cursor _find(const client_session* session, bsoncxx::document::view_or_value filter, const options::find& options); MONGOCXX_PRIVATE stdx::optional _find_one( const client_session* session, bsoncxx::document::view_or_value filter, const options::find& options); MONGOCXX_PRIVATE stdx::optional _find_one_and_delete( const client_session* session, bsoncxx::document::view_or_value filter, const options::find_one_and_delete& options); MONGOCXX_PRIVATE stdx::optional _find_one_and_replace( const client_session* session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value replacement, const options::find_one_and_replace& options); MONGOCXX_PRIVATE stdx::optional _find_one_and_update( const client_session* session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::find_one_and_update& options); MONGOCXX_PRIVATE stdx::optional _insert_one( const client_session* session, bsoncxx::document::view_or_value document, const options::insert& options); MONGOCXX_PRIVATE void _rename( const client_session* session, bsoncxx::string::view_or_value new_name, bool drop_target_before_rename, const bsoncxx::stdx::optional& write_concern); MONGOCXX_PRIVATE stdx::optional _replace_one( const client_session* session, const options::bulk_write& bulk_opts, const model::replace_one& replace_op); MONGOCXX_PRIVATE stdx::optional _replace_one( const client_session* session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value replacement, const options::replace& options); MONGOCXX_PRIVATE stdx::optional _update_one( const client_session* session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::update& options); MONGOCXX_PRIVATE stdx::optional _update_many( const client_session* session, bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update, const options::update& options); MONGOCXX_PRIVATE change_stream _watch(const client_session* session, const pipeline& pipe, const options::change_stream& options); // Helpers for the insert_many method templates. class bulk_write _init_insert_many(const options::insert& options, const client_session* session); void _insert_many_doc_handler(class bulk_write& writes, bsoncxx::builder::basic::array& inserted_ids, bsoncxx::document::view doc) const; stdx::optional _exec_insert_many( class bulk_write& writes, bsoncxx::builder::basic::array& inserted_ids); template MONGOCXX_PRIVATE stdx::optional _insert_many( const client_session* session, document_view_iterator_type begin, document_view_iterator_type end, const options::insert& options); class MONGOCXX_PRIVATE impl; MONGOCXX_PRIVATE impl& _get_impl(); MONGOCXX_PRIVATE const impl& _get_impl() const; std::unique_ptr _impl; }; MONGOCXX_INLINE stdx::optional collection::write( const model::write& write, const options::bulk_write& options) { return create_bulk_write(options).append(write).execute(); } MONGOCXX_INLINE stdx::optional collection::write( const client_session& session, const model::write& write, const options::bulk_write& options) { return create_bulk_write(session, options).append(write).execute(); } template MONGOCXX_INLINE stdx::optional collection::bulk_write( const container_type& requests, const options::bulk_write& options) { return bulk_write(requests.begin(), requests.end(), options); } template MONGOCXX_INLINE stdx::optional collection::bulk_write( const client_session& session, const container_type& requests, const options::bulk_write& options) { return bulk_write(session, requests.begin(), requests.end(), options); } template MONGOCXX_INLINE stdx::optional collection::bulk_write( write_model_iterator_type begin, write_model_iterator_type end, const options::bulk_write& options) { auto writes = create_bulk_write(options); std::for_each(begin, end, [&](const model::write& current) { writes.append(current); }); return writes.execute(); } template MONGOCXX_INLINE stdx::optional collection::bulk_write( const client_session& session, write_model_iterator_type begin, write_model_iterator_type end, const options::bulk_write& options) { auto writes = create_bulk_write(session, options); std::for_each(begin, end, [&](const model::write& current) { writes.append(current); }); return writes.execute(); } template MONGOCXX_INLINE stdx::optional collection::insert_many( const container_type& container, const options::insert& options) { return insert_many(container.begin(), container.end(), options); } template MONGOCXX_INLINE stdx::optional collection::insert_many( const client_session& session, const container_type& container, const options::insert& options) { return insert_many(session, container.begin(), container.end(), options); } template MONGOCXX_INLINE stdx::optional collection::_insert_many( const client_session* session, document_view_iterator_type begin, document_view_iterator_type end, const options::insert& options) { bsoncxx::builder::basic::array inserted_ids; auto writes = _init_insert_many(options, session); std::for_each(begin, end, [&inserted_ids, &writes, this](bsoncxx::document::view doc) { _insert_many_doc_handler(writes, inserted_ids, doc); }); return _exec_insert_many(writes, inserted_ids); } template MONGOCXX_INLINE stdx::optional collection::insert_many( document_view_iterator_type begin, document_view_iterator_type end, const options::insert& options) { return _insert_many(nullptr, begin, end, options); } template MONGOCXX_INLINE stdx::optional collection::insert_many( const client_session& session, document_view_iterator_type begin, document_view_iterator_type end, const options::insert& options) { return _insert_many(&session, begin, end, options); } MONGOCXX_INLINE_NAMESPACE_END } // namespace mongocxx #include