You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP操作MongoDB:如何插入新数据不删除现有数据?

解决MongoDB不删除现有数据插入新数据的问题

嘿,我一眼就找到问题根源啦!你代码里的$bulk->delete([]);这行是清空整个集合的操作——这就是每次插入新数据时旧数据都会消失的原因。

要保留现有数据只插入新内容,只需要把这行删除就可以了!修改后的完整代码如下:

$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
// 移除了$bulk->delete([]);这行删除所有数据的代码
$bulk->insert(['accessToken'=>'PQRST','ID'=>'789']);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$connection = new MongoDB\Driver\Manager("mongodb://localhost:27017");

try {
    $result = $connection->executeBulkWrite('db.collection', $bulk,$writeConcern);
    // 新增成功提示,方便验证插入结果
    echo "成功插入 " . $result->getInsertedCount() . " 条数据\n";
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
    $result = $e->getWriteResult();
    if ($writeConcernError = $result->getWriteConcernError()) {
        printf("%s (%d): %s\n", $writeConcernError->getMessage(), $writeConcernError->getCode(), var_export($writeConcernError->getInfo(), true) );
    }
    // 检查未完成的写入操作
    foreach ($result->getWriteErrors() as $writeError) {
        printf("Operation#%d: %s (%d)\n", $writeError->getIndex(), $writeError->getMessage(), $writeError->getCode() );
    }
} catch (MongoDB\Driver\Exception\Exception $e) {
    printf("Other error: %s\n", $e->getMessage());
    exit;
}

额外实用建议:

如果你的需求是当某个唯一标识字段(比如ID)不存在时插入,存在时更新对应内容,可以用update方法配合upsert选项,避免重复插入相同数据:

// 当ID为789的文档不存在时插入,存在时更新accessToken字段
$bulk->update(
    ['ID' => '789'], // 查询条件
    ['$set' => ['accessToken' => 'PQRST']], // 要更新的内容
    ['upsert' => true] // 开启upsert模式
);

内容的提问来源于stack exchange,提问作者Antonio Iannacci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:40:34