首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mongo ODM的GridFS不起作用

使用Mongo ODM的GridFS不起作用
EN

Stack Overflow用户
提问于 2012-08-08 13:07:52
回答 2查看 712关注 0票数 1

我有一个用户文档,需要使用GridFS为该文档提供多张图片。我无法使用GridFS保存文件。

下面是我的用户文档:

代码语言:javascript
复制
namespace Main\UserBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 *@MongoDB\Document(db="mydb", collection="users")
 */
class User
{
    /**
     * @MongoDB\Id
     */
    protected $id;


    /** @MongoDB\EmbedMany(targetDocument="Asset") */
    public $assets = array();

    public function __construct()
    {
        $this->assets = new \Doctrine\Common\Collections\ArrayCollection();
    }


     /**
     * Get id
     *
     * @return id $id
     */
    public function getId()
    {
        return $this->id;
    }



    /**
     * Add assets
     *
     * @param Main\ClassifiedBundle\Document\Asset $assets
     */
    public function addAsset(\Main\ClassifiedBundle\Document\Asset $asset)
    {
        $this->assets[] = $asset;
    }

    /**
     * Get assets
     *
     * @return Doctrine\Common\Collections\Collection $assets
     */
    public function getAsset()
    {
        return $this->assets;
    }

} 

这是我的资产文件:

代码语言:javascript
复制
namespace Main\UserBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;


/** @MongoDB\EmbeddedDocument */
    class Asset
    {
         /**
         * @MongoDB\Id
         */
        public $id;


    /** @MongoDB\Field */
    public $name;

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

    /** @MongoDB\Field */
    public $uploadDate;

    /** @MongoDB\Field */
    public $length;

    /** @MongoDB\Field */
    public $chunkSize;

    /** @MongoDB\Field */
    public $md5;

    public function getId()
    {
        return $this->id;
    }

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }

    public function getFile()
    {
        return $this->file;
    }

    public function setFile($file)
    {
        $this->file = $file;
    }

}

现在,在我的控制器中,我正在尝试执行以下操作:

代码语言:javascript
复制
$dm = $this->get('doctrine.odm.mongodb.document_manager');
    $user = $dm->getRepository('MainUserBundle:User')
    ->find(1); //I already have a user document with id 1

    $asset = new Asset();
    $asset->setName('Test image');
    $asset->setFile($uploadedFile->getPathname()); //I have verified that this is a valid image
   $user->addAsset($asset);

   var_dump($user);

  $dm->persist($user);
    $dm->flush();

我在日志中看到的错误是:

代码语言:javascript
复制
MongoException: zero-length keys are not allowed, did you use $ with double quotes? (uncaught exception)

我在下面的位置得到了它:

代码语言:javascript
复制
myapp.com/vendor/doctrine-mongodb/lib/Doctrine/MongoDB/Collection.php line 203

此外,文档也不会保存。我遗漏了什么?我遵循了mongoodm站点上的所有步骤。??

EN

回答 2

Stack Overflow用户

发布于 2013-01-31 22:27:08

元数据错误

MongoException

您尝试将"“另存为密钥。一般情况下,您不应该这样做。"“可能会扰乱子对象访问,并由MongoDB在内部使用。但是,如果确实需要,可以在php.ini文件中将mongo.allow_empty_keys设置为true,以覆盖此健全性检查。如果覆盖此设置,强烈建议您将错误检查设置为严格,以避免字符串插值错误。

例如:

代码语言:javascript
复制
$m = new MongoClient();
$gridfs = $m->selectDB('test')->getGridFS();

$metaData = array(
'' => 'value', // '' as key
);

$gridfs->storeUpload('pic', $metaData);
票数 0
EN

Stack Overflow用户

发布于 2014-02-06 19:59:35

使用当前版本的MongoDB ODM在嵌入式文档中存储GridFS文件似乎是不可能的。

您可以使用@ReferenceMany作为变通方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11857975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档