Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb ReferenceMany生成$pushAll字段,在尝试保存MongoGridFs文件时引发错误_Mongodb_Symfony_Doctrine Odm - Fatal编程技术网

Mongodb ReferenceMany生成$pushAll字段,在尝试保存MongoGridFs文件时引发错误

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 我用原

好了,伙计们,要么我错过了什么大事,要么我只是踩到了一只虫子

这是一个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

我用
原则: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集合时遇到了重大问题。参考资料很糟糕。

谢谢,你说得对,这是一个教义的错误。我终于做了一个肮脏的解决办法。。。