pymongo实现_id自增长
发布时间
阅读量:
阅读量
import pymongo
# 数据库
db = pymongo.MongoClient('mongodb://localhost:27017/')['abc']
# 计数器
counter = db['counter']
# book文档集合
books = db['books']
# 初始化计数器
def init_counter(sequence_name):
count_doc = {
'_id': sequence_name,
'sequence_value': 0
}
counter.insert_one(count_doc)
# 获取计数器自增值
def get_next_sequence_value(sequence_name):
updated_count_doc = counter.find_one_and_update({'_id': sequence_name},
{'$inc': {'sequence_value': 1}}, return_document=True)
return updated_count_doc['sequence_value']
if __name__ == '__main__':
init_counter('book_id')
计数器变量init_counter在这里作为book的计数器使用,在书籍管理系统中,默认情况下每个书籍都需要进行初始化操作仅需执行一次即可完成。其中sequence_name字段对应于唯一标识符(如book_id),例如:在书籍管理中,默认情况下每个书籍都有一个唯一的书号编号(如book_id)。
如果打算将其用作其他文档集合的计数器,请只需更改参数设置(即将'book_id'替换为所需的id名称)。
在一个计数器组中可以存在若干个独立的counting对象。每个counting对象相当于一个独立的counting机制. 本例仅创建了单一的book counting机制.
计数器集合:

该算法依赖于pymongo库中的find_one_and_update函数来生成序列值,默认情况下会自动计算并返回下一个序列值
第一部分为查询参数,在该字段上设置指定的搜索条件;第二部分则是用于执行修改操作的逻辑指令
return_document=True 标识为返回更新版本的文档,默认情况下设置为False时则输出原有版本的文档
测试代码:
if __name__ == '__main__':
book_list = [
{'name': '《红楼梦》', 'author': '曹雪芹'},
{'name': '《水浒传》', 'author': '施耐庵'},
{'name': '《西游记》', 'author': '吴承恩'},
{'name': '《三国演义》', 'author': '罗贯中'}
]
for book in book_list:
book_dict = {
'_id': get_next_sequence_value('book_id'),
'book_name': book['name'],
'book_author': book['author']
}
books.insert_one(book_dict)
计数器集合变化:

books文档集合:

全部评论 (0)
还没有任何评论哟~
