跳到主要内容

mongo_clients

简介

通过格式化配置创建mongo数据库的操作客户端对象

需要预先加载格式化配置的mongo数据库(组织方式以及访问方式);

访问方式有两种:一是通过pkg.mongoc直接操作数据库,需要指明一种是通过pkg.remote_mongoc间接数据库;

组织方式主要是:数据库有哪些表;哪些字段需要创建唯一索引、哪些字段需要创建普通索引、哪些字段需要参与校验和计算等等;

组件接口

MongoClient.gs

通过pkg.mongoc操作mongo数据库的客户端对象

函数原型函数作用
string get_name()获取本客户端的名称
string get_db()获取所操作的数据库的名字
array get_checksum_fields(string coll_name)获取指定名称的集合的参与校验和计算的字段列表
object get_or_create_collection(string name, map fields = nil, array checksum_fields = nil)获取指定名称的集合的操作对象,如果不存在则创建
object get_coll(string name)获取指定名称的集合的操作对象
object get_gridfs(string name)获取指定名称的gridfs的操作对象
mixed transaction(function fn, ...)执行一个事务
object client()获取本对象封装的数据库客户端连接对象

mongo_clients.gs

函数原型函数作用
void setup(map mongoc_cfg, array dbs = nil)启动mongodb服务
void iterate_dbs(function fn)遍历所有数据库配置
string get_name_from_config(map db_info, map para)从数据库信息和额外参数中根据规则获得数据库的称呼
string get_db_from_config(map db_info, map para)从数据库信息和额外参数中根据规则获得数据库的名字
void add_db(map db_config)加载一个格式化的数据库配置
map get_db_config(string db_name)获取指定名称的数据库配置
object new_client_from_config(map db_config)通过一个数据库的格式化配置创建一个操作客户端对象
object new_remote_client(map remote_cfg, map db_info, map collections, map para = )通过一个数据库的格式化配置创建一个通过pkg.remote_mongoc操作的客户端对象
object new_client(map db_info, map collections, map para = )通过一个数据库的格式化配置创建一个通过pkg.mongoc操作的客户端对象
void name_client(string name, object client)为一个操作对象命名
object find_client(string name)根据名称找到操作对象
void dumps()输出调试信息
map parse_uri(string uri)解析uri

RemoteMongoClient.gs

通过pkg.remote_mongoc操作mongo数据库的客户端对象

函数原型函数作用
string get_name()获取本客户端的名称
string get_db()获取所操作的数据库的名字
object get_coll(string name)获取指定名称的集合的操作对象

样例


#pragma parallel

import gs.lang.*;
import gs.util.*;
import pkg.mongo_clients;

public void sample()
{
map mongoc_cfg = {
"thread_num" : 2,
};

array dbs = [
];

map db_config = {
"db" : {
"name" : "base",
"db" : "base",
"host" : "127.0.0.1",
"port" : 27017,
"auth" : {},
"collection_checksum" : {
"users" : ["account_id"],
},
},
"collections" : {
"users" : {
"account_id" : false, // =false, normal索引
"account" : false, // =false, normal索引
"rid" : true, // =true, unique索引
"name" : false, // =false, normal索引
"__unique_index" : [ // 其他unique索引
[ "account", "rid" ],
[ "account_id", "rid" ]
],
"__normal_index" : [ // 其他normal索引
[ "rid", "name" ]
]
},
},
"para" : {
"name" : "base@local", // 比"db"字段中的name优先
"db" : "local_base", // 比"db"字段中的"db"优先
}
};
dbs.push_back(db_config);

// 启动服务
mongo_clients=>setup(mongoc_cfg, dbs);

// 通过名称获取操作对象
object local_client = mongo_clients.find_client("base@local");
printf("name=%M\n", local_client.get_name());
printf("db=%M\n", local_client.get_db());

// 获取集合操作对象
object coll_users = local_client.get_coll("users");
printf("coll_users: %M\n", coll_users);

// 通过集合对象(pkg.mongoc.async_collection)操作数据
//
}