mongoc_database_aggregate()#
Synopsis#
mongoc_cursor_t *
mongoc_database_aggregate (mongoc_database_t *database,
const bson_t *pipeline,
const bson_t *opts,
const mongoc_read_prefs_t *read_prefs)
BSON_GNUC_WARN_UNUSED_RESULT;
Parameters#
database
: A mongoc_database_t.pipeline
: Abson_t
, either a BSON array or a BSON document containing an array field named “pipeline”.opts
: Abson_t
containing options for the command, orNULL
.read_prefs
: A mongoc_read_prefs_t orNULL
.
opts
may be NULL or a BSON document with additional command options:
readConcern
: Construct a mongoc_read_concern_t and use mongoc_read_concern_append() to add the read concern toopts
. See the example code for mongoc_client_read_command_with_opts(). Read concern requires MongoDB 3.2 or later, otherwise an error is returned.writeConcern
: Construct a mongoc_write_concern_t and use mongoc_write_concern_append() to add the write concern toopts
. See the example code for mongoc_client_write_command_with_opts().sessionId
: First, construct a mongoc_client_session_t with mongoc_client_start_session(). You can begin a transaction with mongoc_client_session_start_transaction(), optionally with a mongoc_transaction_opt_t that overrides the options inherited fromdatabase
, and use mongoc_client_session_append() to add the session toopts
. See the example code for mongoc_client_session_t.bypassDocumentValidation
: Set totrue
to skip server-side schema validation of the provided BSON documents.collation
: Configure textual comparisons. See Setting Collation Order, and the MongoDB Manual entry on Collation. Collation requires MongoDB 3.2 or later, otherwise an error is returned.serverId
: To target a specific server, include an int32 “serverId” field. Obtain the id by calling mongoc_client_select_server(), then mongoc_server_description_id() on its return value.batchSize
: Anint32
representing number of documents requested to be returned on each call to mongoc_cursor_next()let
: A BSON document consisting of any number of parameter names, each followed by definitions of constants in the MQL Aggregate Expression language.comment
: Abson_value_t
specifying the comment to attach to this command. The comment will appear in log messages, profiler output, and currentOp output. Only string values are supported prior to MongoDB 4.4.hint
: A document or string that specifies the index to use to support the query predicate.
For a list of all options, see the MongoDB Manual entry on the aggregate command.
Description#
This function creates a cursor which sends the aggregate command on the underlying database upon the first call to mongoc_cursor_next(). For more information on building aggregation pipelines, see the MongoDB Manual entry on the aggregate command. Note that the pipeline must start with a compatible stage that does not require an underlying collection (e.g. “$currentOp”, “$listLocalSessions”).
Read preferences, read and write concern, and collation can be overridden by various sources. The highest-priority sources for these options are listed first in the following table. In a transaction, read concern and write concern are prohibited in opts
and the read preference must be primary or NULL. Write concern is applied from opts
, or if opts
has no write concern and the aggregation pipeline includes “$out”, the write concern is applied from database
.
Read Preferences |
Read Concern |
Write Concern |
Collation |
---|---|---|---|
|
|
|
|
Transaction |
Transaction |
Transaction |
|
|
|
|
See the example for transactions and for the “distinct” command with opts.
This function is considered a retryable read operation unless the pipeline contains a write stage like $out or $merge.
Upon a transient error (a network error, errors due to replica set failover, etc.) the operation is safely retried once.
If retryreads
is false in the URI (see mongoc_uri_t) the retry behavior does not apply.
Returns#
This function returns a newly allocated mongoc_cursor_t that should be freed with mongoc_cursor_destroy() when no longer in use. The returned mongoc_cursor_t is never NULL
, even on error. The user must call mongoc_cursor_next() on the returned mongoc_cursor_t to execute the initial command.
Cursor errors can be checked with mongoc_cursor_error_document(). It always fills out the bson_error_t
if an error occurred, and optionally includes a server reply document if the error occurred server-side.
Warning
Failure to handle the result of this function is a programming error.
Example#
#include <bson/bson.h>
#include <mongoc/mongoc.h>
static mongoc_cursor_t *
current_op_query (mongoc_client_t *client)
{
mongoc_cursor_t *cursor;
mongoc_database_t *database;
bson_t *pipeline;
pipeline = BCON_NEW ("pipeline",
"[",
"{",
"$currentOp",
"{",
"}",
"}",
"]");
/* $currentOp must be run on the admin database */
database = mongoc_client_get_database (client, "admin");
cursor = mongoc_database_aggregate (
database, pipeline, NULL, NULL);
bson_destroy (pipeline);
mongoc_database_destroy (database);
return cursor;
}