doctrine odm批量插入 - 并非所有文档都被保存

时间:2012-02-18 23:49:41

标签: mongodb doctrine-odm

我有一个67352行的文件。一行是一个名字。我正在使用foreach批量插入这些名称。在这些67352中,当使用100的批量大小时,只有52262条记录被持久化到数据库。如果批量大小更高,更少的文档被保留,如果它更低,则更多文档被保留,但我从未获得所有文档持续存在。

odm的版本是1.0.0beta3,我也尝试使用1.0.0rc1,结果相同。

代码如下所示:

$batchSize = 100;
foreach ($data as $name)
{
    $doc = new \SomeDocument;
    $doc->setName($name);

    $dm->persist($doc);
    $i++;

    if ($i % $batchSize == 0)
    {
        $dm->flush();
        $dm->clear();
    }
}
$dm->flush();
谁能告诉我什么是错的?感谢

1 个答案:

答案 0 :(得分:1)

您还没有提到您正在使用的索引等等,但我们假设它是默认值,并且您没有遇到唯一性问题(特别是因为您的结果是可变的)。听起来你的一些写作失败/迷路。

尝试使用以下命令运行批量插入

$dm->flush(array('safe'=>true));

它会慢一点,但至少它现在应该在你看到失败时抛出异常而你可以从那里拿走它。