Advertisement

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)

还没有任何评论哟~