使用jenssegers/mongodb时sessions集合出现重复键错误的排查与解决
问题原因
- Session驱动配置错误:未切换到MongoDB专用的Session驱动,仍使用Laravel默认的
database或file驱动。这会导致Laravel用SQL数据库的逻辑处理MongoDB的sessions集合,更新Session时错误执行插入操作,触发id字段的唯一索引冲突。 - 默认SQL迁移适配问题:执行了Laravel原生的SQL迁移(包括
sessions表迁移),这些迁移生成的MongoDB集合结构与jenssegers/mongodb扩展预期的Session集合结构不匹配,引发Session更新逻辑异常。
解决步骤
1. 修正Session驱动配置
打开config/session.php,将driver项修改为mongodb:
'driver' => env('SESSION_DRIVER', 'mongodb'),
同时在.env文件中同步配置:
SESSION_DRIVER=mongodb
2. 删除不兼容的sessions集合
通过MongoDB Compass或命令行删除MngProducts库下的sessions集合——jenssegers/mongodb扩展会自动创建适配的Session集合,无需手动迁移。
3. 验证Session模型配置(可选)
检查config/session.php中是否指定了MongoDB的Session模型,若没有则添加:
'model' => Jenssegers\Mongodb\Session\Session::class,
4. 清除配置缓存
执行以下命令让新配置生效:
php artisan config:clear php artisan cache:clear
完成以上操作后,再次访问页面即可解决重复键错误问题。
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

