mongo-c-driver MongoDB使用笔记

本文介绍了如何使用mongo-c-driver进行MongoDB的查询、更新操作,包括查询条件、投影、更新策略、数组字段操作以及ISODate类型字段的处理。详细讲解了不同查询操作和更新选项,如不等于、包含、大于、小于等条件,并提供了示例代码。

最近一个项目,使用了MongoDB,c 语言调用 mongo-c-driver 函数实现数据库的操作,网上资料较少,自己摸索总结了一些方法,做个记录。

一、查询

1、函数 mongoc_collection_find_with_opts 和  mongoc_collection_find 

     如果只有查询条件,没有输出条件,这两个函数都可使用;如果有输出条件,则使用mongoc_collection_find_with_opts,结合关键字:projection

例子:

query = BCON_NEW("AfileID", FileID);
bson_init(&child3);
BSON_APPEND_DOCUMENT_BEGIN(&child3, "projection", &child);
BSON_APPEND_INT32(&child, "_id", 0);
BSON_APPEND_INT32(&child, "username", 0);
bson_append_document_end(&child3, &child);
cursor = mongoc_collection_find_with_opts(collection_file, query, &child3, NULL);

    其中,_id是MongoDB自动添加的id字段, BSON_APPEND_INT32(&child, "_id", 0);中的0,表示不输出。

2、比较

1)不等于:not eq:

                        bson_append_document_begin(&child2, "username", -1, &child3);
                        bson_append_document_begin(&child3, "$not", -1, &child4);
                        BSON_APPEND_UTF8(&child4, "$eq", m_username);
                        bson_append_document_end(&child3, &child4);
                        bson_append_document_end(&child2, &child3);

2)包含:regex (任意位置开始匹配)

                        bson_append_document_begin(&child2, "userpart", -1, &child3);
                        BSON_APPEND_UTF8(&child3, "$regex", sstr2.c_str());
                        bson_append_document_end(&child2, &child3);

                regex  ^  (从头开始匹配)

         
### 使用 Apache Calcite 和 Mongo-Java-Driver 连接 MongoDB 数据库 Apache Calcite 是一个动态数据管理框架,支持多种数据源的查询处理,包括关系型数据库、NoSQL 数据库以及自定义数据源。MongoDB 作为一种流行的 NoSQL 数据库,可以通过 Calcite 的适配器(Adapter)机制实现 SQL 查询能力。 #### 配置 Calcite 使用 MongoDB Adapter Calcite 提供了专门用于 MongoDB 的适配器 `org.apache.calcite.adapter.mongodb.MongoSchemaFactory`,它允许通过标准的 SQL 语法访问 MongoDB 集合中的数据。 在配置过程中,需要引入必要的依赖项,并设置连接参数。以下是一个典型的 Schema 定义方式: ```json { "name": "mongo", "type": "custom", "factory": "org.apache.calcite.adapter.mongodb.MongoSchemaFactory", "operand": { "host": "localhost", "port": 27017, "database": "test" } } ``` 此配置将创建一个名为 `mongo` 的 schema,指向本地运行的 MongoDB 实例中的 `test` 数据库[^4]。 #### Java 示例:使用 Calcite 连接 MongoDB 下面是一个完整的示例代码,展示如何通过 Calcite 使用 Mongo-Java-Driver 连接到 MongoDB 并执行 SQL 查询: ```java import org.apache.calcite.jdbc.CalciteConnection; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class CalciteMongoExample { public static void main(String[] args) throws Exception { // 加载 Calcite JDBC 驱动 Class.forName("org.apache.calcite.jdbc.Driver"); // 建立连接,这里假设有一个配置文件 calcite-model.json Connection connection = DriverManager.getConnection("jdbc:calcite:model=src/main/resources/calcite-model.json"); CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class); Statement statement = calciteConnection.createStatement(); // 执行 SQL 查询 ResultSet resultSet = statement.executeQuery("SELECT * FROM mongo.test.collection_name LIMIT 5"); // 输出结果 while (resultSet.next()) { System.out.println(resultSet.getString(1)); } // 关闭资源 resultSet.close(); statement.close(); connection.close(); } } ``` 其中,`calcite-model.json` 文件内容如下: ```json { "version": "1.0", "defaultSchema": "mongo", "schemas": [ { "name": "mongo", "type": "custom", "factory": "org.apache.calcite.adapter.mongodb.MongoSchemaFactory", "operand": { "host": "localhost", "port": 27017, "database": "test" } } ] } ``` #### 自定义函数与扩展性 如果希望在 SQL 中调用 MongoDB 的聚合操作或用户自定义函数(UDF),可以在 schema 中进行扩展。例如,在 operand 中添加 functions 列表来定义特定逻辑[^2]。 此外,Calcite 的 MongoDB Adapter 会自动将 SQL 转换为对应的 MongoDB 查询语句,开发者无需手动编写 BSON 查询逻辑即可完成复杂的数据检索任务[^3]。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值