2

I get the same message error (duplicate key error index with same id on different value) when I would like to insert value after a failed.

Key exist for value 15 to 17 in MONGODB, exception will be thrown. It's normal uses case but I get the same error message, and data has not be inserted after 17, which is not the normal use case. No key has been written before for 18,19,20 and the same exception has been thrown

Do you have an idea?

ERROR MESSAGE:

15E11000 duplicate key error index: api.inventory_user.$reference_id_1_member_id_1 dup key: { : "15", : "test@test.com" }15
16E11000 duplicate key error index: api.inventory_user.$reference_id_1_member_id_1 dup key: { : "15", : "test@test.com" }16
17E11000 duplicate key error index: api.inventory_user.$reference_id_1_member_id_1 dup key: { : "15", : "test@test.com" }17
18E11000 duplicate key error index: api.inventory_user.$reference_id_1_member_id_1 dup key: { : "15", : "test@test.com" }18
19E11000 duplicate key error index: api.inventory_user.$reference_id_1_member_id_1 dup key: { : "15", : "test@test.com" }19
20E11000 duplicate key error index: api.inventory_user.$reference_id_1_member_id_1 dup key: { : "15", : "test@test.com" }20
  • doctrine-mongodb
  • doctrine-mongodb-odm
  • DoctrineMongoDBBundle

MY CODE:

$i=14;
while($i<20){
$i++;
echo $i;
try{
    $inventoryUser = new InventoryUser();
    $inventoryUser->setMemberId('test@test.com');
    $inventoryUser->setReferenceId($i);
    $this->write($inventoryUser);
}catch (\Exception $e){
    echo $e->getMessage();
    echo $i;

}

}

private function write($inventory){
    try{
        $dm = $this->get('doctrine.odm.mongodb.apibase_document_manager');
        $dm->persist($inventory);
        $dm->getSchemaManager()->ensureIndexes();
        $dm->flush();

    }catch (\Exception $e){
        throw new \Exception($e->getMessage());
    }
}
namespace API\StoreBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;


/**
* @MongoDB\Document(db="api",collection="inventory_user")
* @MongoDB\UniqueIndex(keys={"reference_id"="asc", "member_id"="asc"})
*/
class InventoryUser
{

 /**
 * @MongoDB\Id
 */
private $id;


/**
 * @MongoDB\String
 */
private $reference_id;

 /**
 * @MongoDB\String
 */
private $member_id;


public function getReferenceId(){
    $this->reference_id;
}

public function getMemberId(){
    $this->member_id;
}

public function setReferenceId($reference_id){
    $this->reference_id=$reference_id;
}

public function setMemberId($member_id){
    $this->member_id=$member_id;
}
}
j0k
  • 22,600
  • 28
  • 79
  • 90
  • User, can you put your full code on pastbin or in a gist? What you have there would not run, it looks like you have several blocks running together as one big block. – daveh Dec 12 '12 at 06:22
  • please provide user model structure. Is it looks like {"id": [Num], "email": "[Email]"} or has some additional fields? Second question is which indexes do you already have? Use mongoshell and db.collection.getIndexes() command to find the answer. Third question is about this line "$dm->getSchemaManager()->ensureIndexes();". Not sure maybe in php ensureIndexes() has some default key for indexing, but usualy this command looks like "db.collection.ensureIndex(key_patern, [options])" key patern should be some thing like this {"id": 1} - 1 means accending sort. – VitVad Dec 12 '12 at 16:44
  • And the last one. As I understand you trying make reIndex() on each write operation, but it is not necessary, as I know mongo reIndex collection on each write/update operation. – VitVad Dec 12 '12 at 16:46
  • Try to show us the full code, this isn't helpful. – Rakesh Sankar Apr 29 '13 at 11:02

0 Answers0