Mongo 的带有 updateOne + upsert 的bulkWrite 第一次可以工作,但随后会出现重复键错误

问题描述 投票:0回答:1

我正在使用 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”设置了唯一索引。

非常感谢您的帮助。

php mongodb mongodb-query php-mongodb
1个回答
0
投票

好吧,我能够修复它。我相信这可能是一个错误,我已经在 Github 存储库中报告了它。

仅当“id”是一串数字时才会出现该问题。一旦我将“id”(我正在索引的字段)转换为整数,它就可以完美工作。

© www.soinside.com 2019 - 2024. All rights reserved.