MongoException:不允许使用零长度键,是否使用带双引号的$?

Vic*_*ins 6 mongodb symfony doctrine-odm

我正在使用symfony2和mongodb,直到今天,一切正常,但是我创建了一个新文档,突然出现了这个错误:

"MongoException:不允许使用零长度键,你是否使用带双引号的$?"

$dm = $this->get('doctrine.odm.mongodb.document_manager');
$_repo = $dm->getRepository('CantaoCustomerBundle:CustomerTags');
$_repo->findOneByCustomer($customer);
Run Code Online (Sandbox Code Playgroud)

$customer它的确定,资源库是空的,我的文档类是这样的:

    /**
     * @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;
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我,有一些想法,我尝试了一切,似乎没有任何工作

ntr*_*bng 6

我只是通过使用引用的对象的ID而不是引用对象本身作为我的搜索词来解决这个问题.

$_repo->findOneByCustomer($customer->getId());
Run Code Online (Sandbox Code Playgroud)

编辑:这不是抛出异常但它实际上也没有返回任何东西.我尝试使用新的MongoId($ id),因为建议了几个地方(Doc的MongoDB发现,但是这也没有).最后,我在完整查询构建器中找到了一些按引用搜索的内容(注意:这使用了对象而不是对象的ID).

$dm->createQueryBuilder()->find('CantaoCustomerBundle:CustomerTags')
                         ->field('customer')->references($customer)
                         ->getQuery()->execute();
Run Code Online (Sandbox Code Playgroud)

我觉得这应该做得更简单(就像你原来的那样),但这个修复对我有用.


Fra*_*ula 5

可能是您正在尝试持久化对象私有属性.

如果不是这种情况,调试的一个好方法是关闭零长度密钥检查,以便您可以通过检查它写入mongo的内容来实际调试.

不允许零长度键,你用双引号使用$?

代码:1

您试图将""保存为键.你通常不应该这样做.""可能会破坏子对象访问,并在内部由MongoDB使用.但是,如果您真的想要,可以在php.ini文件中将mongo.allow_empty_keys设置为true以覆盖此完整性检查.如果覆盖它,强烈建议您将错误检查设置为strict以避免字符串插值错误.

http://php.net/manual/en/mongo.configuration.php#ini.mongo.allow-empty-keys