最近一个项目,使用了MongoDB,c 语言调用 mongo-c-driver 函数实现数据库的操作,网上资料较少,自己摸索总结了一些方法,做个记录。
一、查询
1、函数 mongoc_collection_find_with_opts 和 mongoc_collection_find
如果只有查询条件,没有输出条件,这两个函数都可使用;如果有输出条件,则使用mongoc_collection_find_with_opts,结合关键字:projection
例子:
其中,_id是MongoDB自动添加的id字段, BSON_APPEND_INT32(&child, “_id”, 0);中的0,表示不输出。
2、比较
1)不等于:not eq:
2)包含:regex (任意位置开始匹配)
regex ^ (从头开始匹配)
3)并且:and
4)或:or
5)(>) 大于 – $gt (<) 小于 – $lt (>=) 大于等于 – $gte (<= ) 小于等于 – $lte
二、更新
1、mongoc_collection_update (mongoc_collection_t *collection,
mongoc_update_flags_t flags,
const bson_t *selector,
const bson_t *update,
const mongoc_write_concern_t *write_concern,
bson_error_t *error);
其中,flags参数有三种选择:
typedef enum {
MONGOC_UPDATE_NONE = 0, //默认,只修改第一条匹配上的记录
MONGOC_UPDATE_UPSERT = 1 << 0, //找到匹配的记录就修改,找不到就追加一条记录
MONGOC_UPDATE_MULTI_UPDATE = 1 << 1, //批量更新所有匹配上的记录
} mongoc_update_flags_t;
2、更新指定字段:set
三、字段值为数组的操作:
1、数组字段的匹配,可以完全参照非数组字段,只要数组中出现了条件匹配值,则命中。
其中,shareuser 字段是数组字段。
2、数组元素添加 : addToSet
3、数组元素删除: pull
四、ISODate 类型字段的操作
1、插入:ISODate 类型时间,是1900年1月1日0分0秒,到现在的毫秒数(减掉时区),如果想保存到数据库中,则:
结果如下:
比现在时间少了8小时。
2、比较:查找 p1-p2 时间段内的数据记录 p1、p2为 tm 类型变量
3、提取数据库中 ISODate 类型字段:
实际上,数据库中的每条记录,转换成字符串如下所示:
date_time字段是一个json结构,提取方法如下:
本文出自:https://blog.csdn.net/sxm0403/article/details/103471910?spm=1001.2014.3001.5501