调用 mongoc_collection_find 函数时如何出错?

How to get errors when calling mongoc_collection_find function?

查看 Mongo C driver 中用于对集合进行操作的函数,我看到其中许多函数使用 bson_error_t* return 参数来获取可能的错误(并且它们 return false 在那种情况下)。

例如mongo_collection_insert:

布尔值

mongoc_collection_insert (mongoc_collection_t *collection,
                          mongoc_insert_flags_t flags,
                          const bson_t *document,
                          const mongoc_write_concern_t *write_concern,
                          bson_error_t *error);

其他人(mongoc_collection_update or mongoc_collection_remove)的工作方式相同。

但是,执行查询的函数 (mongoc_collection_find) 具有以下签名:

mongoc_cursor_t *
mongoc_collection_find (mongoc_collection_t *collection,
                        mongoc_query_flags_t flags,
                        uint32_t skip,
                        uint32_t limit,
                        uint32_t batch_size,
                        const bson_t *query,
                        const bson_t *fields,
                        const mongoc_read_prefs_t *read_prefs)

在这种情况下没有 bson_error_t* 参数,那么潜在的错误是如何 returned 的?

我想也许检查 return 值 NULL-ness 可能意味着错误(尽管根据文档 return 值是 “新分配的 mongoc_cursor_t不再使用时应该用 mongoc_cursor_destroy() 释放 并且他们没有提到在失败的情况下为 NULL 的可能性)但即使在那种情况下,如何知道确切的发生错误?

操作 mongoc_collection_aggregatemongoc_collection_find 非常相似,那里的文档说:

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; if the parameters are invalid, the bson_error_t in the mongoc_cursor_t is filled out, and the mongoc_cursor_t is returned before the server is selected. The user must call mongoc_cursor_next() on the returned mongoc_cursor_t to execute the aggregation pipeline.

所以问题可能在于 mongoc_collection_find 不完整,但它的工作方式相同。

我提出了一个modification to Mongo C driver documentation来证实我的假设。