You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook代码重复输出及MongoDB数据重复插入问题排查

问题分析与解决思路

这是代码逻辑问题,并非MongoDB或Jupyter Notebook的Bug。核心原因是每次执行代码时,create方法会无条件执行插入操作,且未对重复数据做限制——MongoDB仅默认对_id字段做唯一约束,若你插入的3条数据未指定唯一_id,也未给其他唯一标识字段创建索引,数据库就会允许重复数据持续插入。

具体解决方案:

  • 给唯一标识字段加MongoDB唯一索引
    比如以动物芯片编号chip_id作为唯一标识,在MongoDB客户端执行以下命令创建唯一索引:

    db.animals.createIndex({ "chip_id": 1 }, { unique: true })
    

    后续插入重复chip_id的数据时,MongoDB会直接抛出重复键错误,阻止重复插入。

  • 修改AnimalShelter.py的create方法逻辑
    在插入前先查询是否存在相同数据,仅当数据不存在时执行插入:

    def create(self, data):
        # 根据唯一标识字段查询已有数据
        existing_record = self.read({"chip_id": data["chip_id"]})
        if not existing_record:
            return self.collection.insert_one(data).acknowledged
        else:
            print("该数据已存在,跳过插入")
            return False
    
  • 在Jupyter Notebook中控制插入逻辑的执行
    把插入代码和查询代码拆分,用开关变量控制插入操作仅执行一次:

    # 仅首次执行时设为True,之后改为False
    need_insert = False
    
    if need_insert:
        shelter.create(animal_data_1)
        shelter.create(animal_data_2)
        shelter.create(animal_data_3)
    
    # 始终执行查询操作
    query_results = shelter.read({})
    for item in query_results:
        print(item)
    

内容的提问来源于stack exchange,提问作者GuillyStudiesCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:55:30