Mongodb ReferenceMany生成$pushAll字段,在尝试保存MongoGridFs文件时引发错误
好了,伙计们,要么我错过了什么大事,要么我只是踩到了一只虫子 这是一个Sf2(v2.0.9)/Doctrine ODM(1.0.0BETA)项目 基本上,我有两个文档,我们称它们为E和p:Mongodb ReferenceMany生成$pushAll字段,在尝试保存MongoGridFs文件时引发错误,mongodb,symfony,doctrine-odm,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 我用原
- E参考了许多p:
/** * @MongoDB\ReferenceMany(targetDocument="P", simple="true") * @MongoDB\Index */ protected $p = array();
- 我不想从p检索相应的E
原则: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();
}
(请不要看太深的代码,我的控制器没有那么糟糕,但我基本上还是在$e->addP($p)
上做foreach($pArr as$p)
)
在我的收藏中,我最终得到了这样的东西E:
"$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")
…然后一切又都好了,我可以保存我的文件而没有任何错误
好的,听起来好像我遗漏了什么,或者我没有在参考的任何部分上进行足够的RTFM,但我还是来这里看看是否有人已经进入了这一领域
干杯。你可能已经明白了。但MongoDB ODM目前在处理GridFS集合时遇到了重大问题。参考资料很糟糕。谢谢,你说得对,这是一个教义的错误。我终于做了一个肮脏的解决办法。。。