I'm using symfony2 and mongodb, until today, everything is OK, but I create a new document, and suddenly, appears this error :
"MongoException: zero-length keys are not allowed, did you use $ with double quotes?"
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$_repo = $dm->getRepository('CantaoCustomerBundle:CustomerTags');
$_repo->findOneByCustomer($customer);
The $customer
it's OK, the repository is empty, and my document class is like this :
/**
* @MongoDB\ID
**/
private $id;
/**
* @MongoDB\ReferenceOne(targetDocument="Tapronto\Mats\ProductBundle\Document\Tag", cascade={"persist"})
**/
private $tag;
/**
* @MongoDB\ReferenceOne(targetDocument="Tapronto\Mats\CustomerBundle\Document\Customer", cascade={"persist"})
**/
private $customer;
/**
* @MongoDB\Float
**/
private $points;
/**
* @MongoDB\Int
**/
private $viewed;
/**
* @MongoDB\Int
**/
private $brought;
/**
* @MongoDB\Int
**/
private $favorited;
/**
* @MongoDB\Date
* @Gedmo\Timestampable(on="create")
**/
private $createdAt;
/**
* @MongoDB\Date
* @Gedmo\Timestampable(on="update")
**/
private $updatedAt;
Can anyone help me, have some idea, I tried everything and nothing seems to work
It could be that you're trying to persist an object private attribute.
If that's not the case a good way to debug is to shut off the zero-length key check so that you can actually debug by checking what it's being written into mongo.
http://php.net/manual/en/mongo.configuration.php#ini.mongo.allow-empty-keys
I just fixed this by using the referenced object's ID instead of the reference object itself as my search term.
EDIT: That isn't throwing the exception but it isn't actually returning anything either. I tried using new MongoId($id) as was suggested a few places (Doctrine MongoDB find by id), but that didn't work either. Finally, I found something in the full query builder that searches by references (note: this uses the object instead of the object's ID).
I feel like this should be done more simply (like you did originally), but this fix is working for me.