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
相关产品推荐
相关产品推荐

