HiveNetNoSql.mongo module¶
MongoDB的HiveNetNoSql实现模块
- class HiveNetNoSql.mongo.MongoNosqlDriver(connect_config: dict = {}, pool_config: dict = {}, driver_config: dict = {})[源代码]¶
基类:
HiveNetNoSql.base.driver_fw.NosqlDriverFWnosql数据库Mongodb驱动
注: MongoDB 4.0+ 才能支持事务, 并且单个mongodb server 不支持事务
- __init__(connect_config: dict = {}, pool_config: dict = {}, driver_config: dict = {})[源代码]¶
初始化驱动
- 参数
connect_config (dict) –
default={}, 数据库的连接参数
host {str} - 连接数据库的ip或uri, 如果使用uri方式, 其他的连接参数不生效
推荐使用uri的方式, uri的参考示例如下:
无验证连接: mongodb://localhost:27017/dbname
验证用户密码: mongodb://name:pass@localhost:27017/dbname
注意: 如果用户名密码包含“:”或“@”需要通过urllib.parse.quote_plus函数进行编码后传入
port {int} - 连接数据库的端口(可选)
usedb {str} - 登录后默认切换到的数据库(可选), 如果不传使用登录后的默认数据库
username {str} - 登录验证用户(可选)
password {str} - 登录验证密码(可选)
dbname {str} - 登录用户的数据库名(可选)
注意: mongodb每个用户都归属指定的数据库, 因此必须与登录的用户名密码匹配, 否则会出现权限错误
connect_on_init {bool} - 是否启动时直接连接数据库, 默认为False(等待第一次操作再连接)
connect_timeout {float} - 连接数据库的超时时间, 单位为秒, 默认为20
pymongo.MongoClient 支持的其他参数…
pool_config (dict) –
default={}, 连接池配置
max_size {int} - 连接池的最大大小, 默认为100
min_size {int} - 连接池维持的最小连接数量, 默认为0
max_idle_time {float} - 连接被移除前的最大空闲时间, 单位为秒, 默认为None
wait_queue_timeout {float} - 在没有空闲连接的时候, 请求连接所等待的超时时间, 单位为秒, 默认为None(不超时)
driver_config (dict) –
default={}, 驱动配置
init_db {dict} - 要在启动驱动时创建的数据库
{
‘数据库名’: {
‘index_only’: False, # 是否仅用于索引, 不创建
’comment’: ‘’, # 数据库注释
’args’: [], # 创建数据库的args参数
’kwargs’: {} #创建数据库的kwargs参数
}
}
init_collections {dict} - 要在启动驱动时创建的集合(表)
{
‘数据库名’: {
‘集合名’: {
‘index_only’: False, # 是否仅用于索引, 不创建
’comment’: ‘’, # 集合注释
’indexs’: {索引字典}, ‘fixed_col_define’: {固定字段定义}
}
…
},
…
}
init_yaml_file {str} - 要在启动时创建的数据库和集合(表)配置yaml文件
注1: 该参数用于将init_db和init_collections参数内容放置的配置文件中, 如果参数有值则忽略前面两个参数
注2: 配置文件为init_db和init_collections两个字典, 内容与这两个参数一致
logger {Logger} - 传入驱动的日志对象
- async abort_transaction(session, *args, **kwargs)[源代码]¶
回滚事务
- 参数
session (Any) – default=None, 启动事务的连接(session)
- async collections_exists(collection: str, *args, **kwargs) bool[源代码]¶
判断集合(表)是否存在
- 参数
collection (str) – 集合名(表名)
- 返回
是否存在
- 返回类型
bool
- async commit_transaction(session, *args, **kwargs)[源代码]¶
提交事务
- 参数
session (Any) – default=None, 启动事务的连接(session)
- async create_collection(collection: str, indexs: Optional[dict] = None, fixed_col_define: Optional[dict] = None, comment: Optional[str] = None, **kwargs)[源代码]¶
创建集合(相当于关系型数据库的表, 如果不存在则创建)
注意: 所有集合都有必须有 ‘_id’ 这个记录的唯一主键字段
- 参数
collection (str) – 集合名(表名)
indexs (dict) –
default=None, 要创建的索引字典, 格式为:
{
‘索引名’: {
# 索引的字段清单
’keys’: {
‘字段名’: { ‘asc’: 是否升序(1为升序, -1为降序) },
…
}
# 创建参数
’paras’: {
‘unique’: 是否唯一索引(True/False),
…MongoDB支持的其他索引参数
}
},
}
fixed_col_define (dict) –
default=None, 固定字段定义(只有固定字段才能进行索引), 格式如下:
{
‘字段名’: {
‘type’: ‘字段类型(str, int, float, bool, json)’,
’len’: 字段长度,
’nullable’: True, # 是否可空
’default’: 默认值,
’comment’: ‘字段注释’
},
…
}
comment (str) – default=None, 集合注释
实现驱动自定义支持的参数 (-) –
- 引发
CollectionInvalid – 当集合已存在将抛出该异常
- property db_name¶
返回当前数据库名 @property {str}
- async delete(collection: str, filter: dict, multi: bool = True, hint: Optional[dict] = None, session: Optional[Any] = None, **kwargs) int[源代码]¶
删除指定记录
- 参数
collection (str) – 集合(表)
filter (dict) – 查询条件字典, 与mongodb的查询条件设置参数一致
multi (bool) – default=True, 是否更新全部找到的记录, 如果为Fasle只更新找到的第一条记录
hint (dict) – default=None, 指定查询使用索引的名字清单
session (Any) – default=None, 指定事务连接对象
- 返回
删除记录数量
- 返回类型
int
- async drop_collection(collection: str, *args, **kwargs)[源代码]¶
删除集合
注: 集合不存在也正常返回
- 参数
collection (str) – 集合名(表名)
- async insert_many(collection: str, rows: list, session: Optional[Any] = None, **kwargs) int[源代码]¶
插入多条记录
- 参数
collection (str) – 集合(表)
rows (list) –
行记录数组
注: 每个记录可以通过’_id’字段指定该记录的唯一主键, 如果不送入, 将自动生成一个唯一主键
session (Any) – default=None, 指定事务连接对象
- 返回
返回插入的记录数量
- 返回类型
int
- async insert_one(collection: str, row: dict, session: Optional[Any] = None, **kwargs) str[源代码]¶
插入一条记录
- 参数
collection (str) – 集合(表)
row (dict) –
行记录字典
注: 每个记录可以通过’_id’字段指定该记录的唯一主键, 如果不送入, 将自动生成一个唯一主键
session (Any) – default=None, 指定事务连接对象
- 返回
返回所插入记录的 _id 字段值
- 返回类型
str
- async list_collections(filter: Optional[dict] = None, **kwargs) list[源代码]¶
获取所有集合(表)清单
- 参数
filter (dict) –
default=None, 查找条件
例如查找所有非’system.’开头的集合: {“name”: {“$regex”: r”^(?!system.)”}}
- 返回
集合(表)清单
- 返回类型
list
- async query_count(collection: str, filter: Optional[dict] = None, skip: Optional[int] = None, limit: Optional[int] = None, hint: Optional[dict] = None, left_join: Optional[list] = None, overtime: Optional[float] = None, session: Optional[Any] = None, **kwargs) int[源代码]¶
获取匹配查询条件的结果数量
- 参数
collection (str) – 集合(表)
filter (dict) – default=None, 查询条件字典, 与mongodb的查询条件设置方法一样,
skip (int) – default=None, 指定跳过返回结果的前面记录的数量
limit (int) – default=None, 指定限定返回结果记录的数量
hint (dict) – default=None, 指定查询使用索引的名字清单
left_join (list) –
default=None, 指定左关联(left outer join)集合信息, 每个数组为一个关联表, 格式如下:
[
{
‘db_name’: ‘指定集合的db’, # 如果不设置则代表和主表是同一个数据库
’collection’: ‘要关联的集合(表)名’,
’as’: ‘关联后的别名’, # 如果不设置默认为集合名
’join_fields’: [(主表字段名, 关联表字段名), …], # 要关联的字段列表, 仅支持完全相等的关联条件
’filter’: …, # 关联表数据的过滤条件(仅用于内部过滤需要关联的数据), 注意字段无需添加集合的别名
},
…
]
overtime (float) – default=None, 指定操作的超时时间, 单位为秒
session (Any) – default=None, 指定事务连接对象
- 返回
返回查询条件匹配的记录数
- 返回类型
int
- async query_group_by(collection: str, group: Optional[dict] = None, filter: Optional[dict] = None, projection: Optional[Union[dict, list]] = None, sort: Optional[list] = None, overtime: Optional[float] = None, session: Optional[Any] = None, **kwargs) list[源代码]¶
获取记录聚合统计的结果
- 参数
collection (str) – 集合(表)
group (dict) –
default=None, 分组返回设置字典(注意与mongodb的_id要求有所区别)
指定分组字段为col1、col2, 聚合字段为count、pay_amt, 其中pay_amt统计col_pay字段的合计数值
{‘id’: ‘$col1’, ‘name’: ‘$col2’, ‘count’: {‘$sum’: 1}, ‘pay_amt’: {‘$sum’: ‘$col_pay’}}
常见的聚合类型: $sum-计算总和, $avg-计算平均值, $min-取最小值, $max-取最大值, $first-取第一条, $last-取最后一条
filter (dict) – default=None, 查询条件字典, 与mongodb的查询条件设置方法一样
projection (dict|list) – default=None, 指定结果返回的字段信息(指统计后的结果)
sort (list) – default=None, 查询结果的排序方式(注意排序字段为返回结果的分组字段, 而不是表的原始字段)
overtime (float) – default=None, 指定操作的超时时间, 单位为秒
session (Any) – default=None, 指定事务连接对象
- 返回
返回结果列表
- 返回类型
list
- async query_iter(collection: str, filter: Optional[dict] = None, projection: Optional[Union[dict, list]] = None, sort: Optional[list] = None, skip: Optional[int] = None, limit: Optional[int] = None, hint: Optional[dict] = None, left_join: Optional[list] = None, fetch_each: int = 1, session: Optional[Any] = None, **kwargs)[源代码]¶
查询记录(通过迭代对象依次返回)
- 参数
collection (str) – 集合(表)
filter (dict) –
default=None, 查询条件字典, 与mongodb的查询条件设置方法一样, 参考如下:
{} : 查询全部记录
{‘id’: ‘info’, ‘ver’: ‘0.0.1’} : where id = ‘info’ and ‘ver’ = ‘0.0.1’
{‘ver’: {‘$lt’: ‘0.0.1’}} : where ver < ‘0.0.1’
注: $lt - 小于, $lte - 小于或等于, $gt - 大于, $gte - 大于或等于, $ne - 不等于
{‘id’: {‘$gt’:50}, ‘$or’: [{‘name’: ‘lhj’},{‘title’: ‘book’}]} :
where id > 50 and (name=’lhj’ or ‘title’ = ‘book’)
{‘name’: {‘$regex’: ‘likestr’}} : where name like ‘%likestr%’, 正则表达式
{‘name’: {‘$in’: [‘a’, ‘b’, ‘c’]}} : where name in (‘a’, ‘b’, ‘c’)
{‘name’: {‘$nin’: [‘a’, ‘b’, ‘c’]}} : where name not in (‘a’, ‘b’, ‘c’)
{‘col_json.sub_col’: ‘test’}: 查询json字段的指定字典key, 可以支持多级
{‘col_json.0’: ‘test’}: 查询json字段的指定数组索引, 可以支持多级
注: 如果条件中涉及_id字段, 应传入ObjectId对象, 例如传入ObjectId(’…’)
注: 可以在字段名前面加 “#序号.” 用于与left_join参数配合使用, 指定当前排序字段所属的关联表索引(序号从0开始)
projection (dict|list) –
default=None, 指定结果返回的字段信息
列表模式: [‘col1’,’col2’, …] 注意: 该模式一定会返回 _id 这个主键
字典模式: {‘_id’: False, ‘col1’: True, …} 该方式可以通过设置False屏蔽 _id 的返回
注1: 只有 _id 字段可以设置为False, 其他字段不可设置为False(如果要屏蔽可以不放入字典)
注2: 可以通过字典模式的值设置为$开头的字段名或json检索路径的方式, 进行字段别名处理, 例如{‘as_name’: ‘$real_name’}或{‘as_name’: ‘$real_name.key.key’}
注3: 可以在字段名前面加 “#序号.” 用于与left_join参数配合使用, 指定当前排序字段所属的关联表索引(序号从0开始), 例如{‘#0.col1’: True, ‘as_name’: ‘$#0.col2’}
注4: mongo的别名形式, 不支持数组索引
sort (list) –
default=None, 查询结果的排序方式
例: [(‘col1’, 1), …] 注: 参数的第2个值指定是否升序(1为升序, -1为降序)
注1: 参数的第1个值可以支持’col1.key1’的方式指定json值进行排序
注2: 参数的第2个值指定是否升序(1为升序, -1为降序)
注3: 可以在字段名前面加 “#序号.” 用于与left_join参数配合使用, 指定当前排序字段所属的关联表索引(序号从0开始)
skip (int) – default=None, 指定跳过返回结果的前面记录的数量
limit (int) – default=None, 指定限定返回结果记录的数量
hint (dict) –
default=None, 指定查询使用索引的名字清单
例: {‘index_name1’: 1, ‘index_name2’: 1}
left_join (list) –
default=None, 指定左关联(left outer join)集合信息, 每个数组为一个关联表, 格式如下:
[
{
‘db_name’: ‘指定集合的db’, # 如果不设置则代表和主表是同一个数据库
’collection’: ‘要关联的集合(表)名’,
’as’: ‘关联后的别名’, # 如果不设置默认为集合名
’join_fields’: [(主表字段名, 关联表字段名), …], # 要关联的字段列表, 仅支持完全相等的关联条件
’filter’: …, # 关联表数据的过滤条件(仅用于内部过滤需要关联的数据), 注意字段无需添加集合的别名
},
…
]
fetch_each (int) – default=1, 每次获取返回的记录数量
session (Any) – default=None, 指定事务连接对象
- 返回
返回的结果列表
- 返回类型
list
- async query_list(collection: str, filter: Optional[dict] = None, projection: Optional[Union[dict, list]] = None, sort: Optional[list] = None, skip: Optional[int] = None, limit: Optional[int] = None, hint: Optional[dict] = None, left_join: Optional[list] = None, session: Optional[Any] = None, **kwargs) list[源代码]¶
查询记录(直接返回清单)
- 参数
collection (str) – 集合(表)
filter (dict) –
default=None, 查询条件字典, 与mongodb的查询条件设置方法一样, 参考如下:
{} : 查询全部记录
{‘id’: ‘info’, ‘ver’: ‘0.0.1’} : where id = ‘info’ and ‘ver’ = ‘0.0.1’
{‘ver’: {‘$lt’: ‘0.0.1’}} : where ver < ‘0.0.1’
注: $lt - 小于, $lte - 小于或等于, $gt - 大于, $gte - 大于或等于, $ne - 不等于
{‘id’: {‘$gt’:50}, ‘$or’: [{‘name’: ‘lhj’},{‘title’: ‘book’}]} :
where id > 50 and (name=’lhj’ or ‘title’ = ‘book’)
{‘name’: {‘$regex’: ‘likestr’}} : where name like ‘%likestr%’, 正则表达式
{‘name’: {‘$in’: [‘a’, ‘b’, ‘c’]}} : where name in (‘a’, ‘b’, ‘c’)
{‘name’: {‘$nin’: [‘a’, ‘b’, ‘c’]}} : where name not in (‘a’, ‘b’, ‘c’)
{‘col_json.sub_col’: ‘test’}: 查询json字段的指定字典key, 可以支持多级
{‘col_json.0’: ‘test’}: 查询json字段的指定数组索引, 可以支持多级
注: 如果条件中涉及_id字段, 应传入ObjectId对象, 例如传入ObjectId(’…’)
注: 可以在字段名前面加 “#序号.” 用于与left_join参数配合使用, 指定当前排序字段所属的关联表索引(序号从0开始)
projection (dict|list) –
default=None, 指定结果返回的字段信息
列表模式: [‘col1’,’col2’, …] 注意: 该模式一定会返回 _id 这个主键
字典模式: {‘_id’: False, ‘col1’: True, …} 该方式可以通过设置False屏蔽 _id 的返回
注1: 只有 _id 字段可以设置为False, 其他字段不可设置为False(如果要屏蔽可以不放入字典)
注2: 可以通过字典模式的值设置为$开头的字段名或json检索路径的方式, 进行字段别名处理, 例如{‘as_name’: ‘$real_name’}或{‘as_name’: ‘$real_name.key.key’}
注3: 可以在字段名前面加 “#序号.” 用于与left_join参数配合使用, 指定当前排序字段所属的关联表索引(序号从0开始), 例如{‘#0.col1’: True, ‘as_name’: ‘$#0.col2’}
注4: mongo的别名形式, 不支持数组索引
sort (list) –
default=None, 查询结果的排序方式
例: [(‘col1’, 1), …] 注: 参数的第2个值指定是否升序(1为升序, -1为降序)
注1: 参数的第1个值可以支持’col1.key1’的方式指定json值进行排序
注2: 参数的第2个值指定是否升序(1为升序, -1为降序)
注3: 可以在字段名前面加 “#序号.” 用于与left_join参数配合使用, 指定当前排序字段所属的关联表索引(序号从0开始)
skip (int) – default=None, 指定跳过返回结果的前面记录的数量
limit (int) – default=None, 指定限定返回结果记录的数量
hint (dict) –
default=None, 指定查询使用索引的名字清单
例: {‘index_name1’: 1, ‘index_name2’: 1}
left_join (list) –
default=None, 指定左关联(left outer join)集合信息, 每个数组为一个关联表, 格式如下:
[
{
‘db_name’: ‘指定集合的db’, # 如果不设置则代表和主表是同一个数据库
’collection’: ‘要关联的集合(表)名’,
’as’: ‘关联后的别名’, # 如果不设置默认为集合名
’join_fields’: [(主表字段名, 关联表字段名), …], # 要关联的字段列表, 仅支持完全相等的关联条件
’filter’: …, # 关联表数据的过滤条件(仅用于内部过滤需要关联的数据), 注意字段无需添加集合的别名
},
…
]
session (Any) – default=None, 指定事务连接对象
- 返回
返回的结果列表
- 返回类型
list
- async run_native_cmd(*args, **kwargs)[源代码]¶
执行原生命令(或SQL)并返回执行结果
注: 该函数不支持驱动的兼容处理, 当前函数直接执行执行的是motor的db.command函数
- async start_transaction(*args, **kwargs) Any[源代码]¶
启动事务
注: 通过该方法处理事务, 必须显式通过commit_transaction或abort_transaction关闭事务
- 返回
返回事务所在的连接(session)
- 返回类型
Any
- async turncate_collection(collection: str, *args, **kwargs)[源代码]¶
清空集合记录
- 参数
collection (str) – 集合名(表名)
- async update(collection: str, filter: dict, update: dict, multi: bool = True, upsert: bool = False, hint: Optional[dict] = None, session: Optional[Any] = None, **kwargs) int[源代码]¶
更新找到的记录
- 参数
collection (str) – 集合(表)
filter (dict) – 查询条件字典, 与mongodb的查询条件设置参数一致
update (dict) –
更新信息字典, 与mongodb的更新设置参数一致, 参考如下:
{‘$set’: {‘name’: ‘myname’, …}}: name=’myname’, 设置某个字段的值
{‘$inc’: {‘age’: 3, …}} : age = age + 3, 对数字类型字段, 在现有值上增加指定数值
{‘$mul’: {‘age’: 2, …}} : age = age * 2, 对数字类型字段, 在现有值上乘以指定数值
{‘$min’: {‘age’: 10, …}} : age = min(age, 10), 将现有值和给出值比较, 设置为小的值
{‘$max’: {‘age’: 10, …}} : age = max(age, 10), 将现有值和给出值比较, 设置为大的值
{‘$unset’: {‘job’: 1}}: job=null, 删除指定字段
{‘$rename’: {‘old_name’: ‘new_name’, …}}: 将字段名修改为新字段名
multi (bool) – default=True, 是否更新全部找到的记录, 如果为Fasle只更新找到的第一条记录
upsert (bool) – default=False, 指定如果记录不存在是否插入
hint (dict) – default=None, 指定查询使用索引的名字清单
session (Any) – default=None, 指定事务连接对象
- 返回
返回更新的数据条数
- 返回类型
int