我正在尝试将数据从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();
?>
使用
$collection->save($row);
而不是插入解决了问题。不知道为什么。
有同样的问题,我相信这是 PHP mongodb 驱动程序的问题,它没有在循环内生成新的 id。
奇怪的是,当我第一次调用脚本时,它插入了所有文档,然后最后弹出了异常,然后当我删除数据库并再次调用脚本时,它只插入了一个文档,然后给出了异常。
无论如何,我在阅读此答案后通过显式分配新id来解决。
在您的情况下,请在插入之前添加以下内容:
$row['_id'] = new MongoId();