php mongo未捕获异常'MongoDuplicateKeyException'E11000

时间:2015-06-19 00:50:40

标签: php mongodb php-5.5

我正在尝试将数据从mysql迁移到mongo。它为mongo增加了一个记录,但随后在第二个记录中我得到了

Fatal error: Uncaught exception 'MongoDuplicateKeyException' with message 'localhost:27017: E11000 duplicate key error index: app.hospitals.$_id_ dup key: { : ObjectId('558365d7423467484bd63af3') }' 

不确定我做错了什么

这是我的代码

<?php
//echo phpinfo();
$host = "localhost";
$user = "root";
$password = "root";
$database = "database";


// Create connection
$conn = new mysqli($host, $user, $password, $database);


$connection = new MongoClient();
$db = $connection->database;
$collection = $db->hospitals;



// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM hospitals";

if($result = $conn->query($sql)){

    $i=0;
    while($row = $result->fetch_assoc()) {
        foreach($row as $key=>$value){

            $collection->insert($row);
            unset($collection->_id);
        }
        if($i > 3) die;
        $i++;
    }

}

$conn->close();

?>

2 个答案:

答案 0 :(得分:1)

使用

$collection->save($row);

而不是insert解决了这个问题。不知道为什么会这样。

答案 1 :(得分:1)

有同样的问题,我认为PHP mongodb驱动程序的问题是它没有在循环内生成新的id。
奇怪的是,我第一次调用脚本时它插入了所有文件然后弹出了异常,然后当我删除数据库并再次调用脚本时,它只在插入异常之前插入了一个文档。
无论如何,我通过明确指定新的ID来阅读this answer后解决了。

在您的情况下,请在插入之前添加:

To use the the AWS sdk in ASP.NET Core based applications you 
need to use the 3.2.X versions of the NuGet packages. 
Note, they are currently marked as beta.