ReferenceMany生成$ pushAll字段,在尝试保存MongoGridFs文件时抛出错误

时间:2012-02-27 17:30:46

标签: mongodb symfony doctrine-odm

好的伙计们,要么我错过了一些大事,要么我只是走错了。

这是一个Sf2(v2.0.9)/ Doctrine ODM(1.0.0BETA)项目。

基本上,我有两个文件,我们称之为E和P:

  • E引用了许多P:

       /**
        * @MongoDB\ReferenceMany(targetDocument="P", simple="true")
        * @MongoDB\Index
        */
        protected $p = array();
    
  • 我不在乎能从P中检索相应的E。

我用doctrine:mongodb:generate:documents生成了E的getter / setter。

当我宣布一个新的E()然后添加一些现有的P($ e-> addP($ p)),就像那样:

$p1 = $this->dm->getRepository('ProjectBundle:P')->findOneBy(array('id' => $pid1)));
$p2 = $this->dm->getRepository('ProjectBundle:P')->findOneBy(array('id' => $pid2)));
$pArr = array($p1, $p2);
$e = new E();
foreach ($pArr as $p) {
  $e->addP();
}

(请注意那段代码,请不要在我的控制器中使用它,但我仍然基本上在foreach($pArr as $p)上进行$e->addP($p)

我最终收集了我的收藏品中的那种物品:

"$pushAll": {
   "p": [
    "0": ObjectId("4f4ba859c883fdf85e00313a"),
    "1": ObjectId("4f4ba859c883fdf85e003af2")
   ]
},
"_id": ObjectId("4f4bb608c883fd7860000001"),
"createdat": ISODate("2012-02-27T16: 57: 44.0Z"),

我发现有一个$ pushAll字段很奇怪但是,我可以用$ e-> getP()读取它;

然而,当我尝试将文件附加到E时,它会阻止我:

/**
 * @MongoDB\ReferenceMany(targetDocument="P", simple="true")
 * @MongoDB\Index
 */
 protected $p = array();

/** @MongoDB\File */
private $file;

因为当我尝试$e->setFile($filename)并持续/刷新时,我最终会遇到这个错误:

[MongoCursorException]                  
document to insert can't have $ fields  

错误显然是指那个奇怪的$pushAll字段。

如果我使用这种条目在MongoDB中手动修改我的文档:

"p": [
  "0": ObjectId("4f4ba859c883fdf85e00313a"),
  "1": ObjectId("4f4ba859c883fdf85e003af2")
],
"_id": ObjectId("4f4bb608c883fd7860000001"),
"createdat": ISODate("2012-02-27T16: 57: 44.0Z")

...然后一切都很好,我可以保存我的文件没有任何错误。

好吧,听起来我错过了某些东西,或者我ReferenceMany部分没有RTFM,但我仍然来这里看看有人已经进入了那个。

干杯。

1 个答案:

答案 0 :(得分:2)

你可能已经想到了这一点。但Doctrine MongoDB ODM目前在使用GridFS集合时遇到了重大麻烦。参考文献坏了。