我正在使用 Mongo-php-library 将许多文档插入我的集合中(使用bulkWrite)。我希望文档已存在则更新,如果不存在则插入,因此我使用“upsert = true”。
代码第一次运行时工作正常(它插入文档),但第二次运行它时出现此错误:
Fatal error: Uncaught MongoDB\Driver\Exception\BulkWriteException: E11000 duplicate key error collection: accounts.posts index: postid dup key: { id: "2338...
我看不出我的代码有什么问题。我已经浏览了所有 SO 帖子,但没有任何帮助。
这是我的代码:
// I prepare the array $post_operations with all updateOne operations
// where $data is an object that contains all the document elements I want to insert
$posts_operations = array();
foreach ($this->posts as $id => $data) {
array_push($posts_operations, array('updateOne' => [['id' => $id], ['$set' => $data], ['upsert' => true]]));
}
// Then I execute the method bulkWrite to run all the updateOne operations
$insertPosts = $account_posts->bulkWrite($posts_operations);
第一次(插入时)可以工作,但第二次(应该更新时)就不行了。
我在集合中为“id”设置了唯一索引。
非常感谢您的帮助。
好吧,我能够修复它。我相信这可能是一个错误,我已经在 Github 存储库中报告了它。
仅当“id”是一串数字时才会出现该问题。一旦我将“id”(我正在索引的字段)转换为整数,它就可以完美工作。