0

我有一个看起来像这样的模型:

class Pdf extends \lithium\data\Model
{

    protected $_meta = array('source' => 'fs.files');
    protected $_schema = array('_id'=>array('type'=>'id'));

    public $file;

    /**
    * @param $zipfile string The full name and path of a zip file
    * @param $filename string
    */
    public static function loadFromFile($zipfile, $filename){
        $name = 'zip://'.$zipfile.'#'.$filename;
        $pdf = Pdf::create(); 
        $pdf->file = file_get_contents($name);
        $pdf->filename = $filename;
        $pdf->metadata = ["filename" => $filename, "zipfile" => $zipfile];
        return $pdf;
    }
}

静态函数获取 zip 存档的全名和存档中文件的名称,创建模型,从存档文件加载内容,设置一些元数据,然后返回模型。这在我正在编写的控制台命令中使用,它将遍历一个 zip 文件列表,每个文件都包含一堆 pdf,并将 pdf 添加到数据库中。

当我保存模型时,pdf 确实会添加到数据库中。我可以从 MongoDB 控制台查看所有 pdf,即使用db.fs.files.find(). 我还可以使用 mongofiles 命令从数据库中获取 pdf。

但是,如果不是将 pdf 存储在 fs.files 下,而是将它们存储在 fs.files.pdfs 下,那就太好了。这是因为我计划将 jpeg 和文本文档也存储在同一个数据库中。

如果我将类中的 $_meta 更改为array('source' => 'fs.files.pdfs'),我的控制台命令似乎会将 pdf 文档输出到终端而不是添加它(顺便说一下,我想知道 Lithium 这样做的原因!)

我已经检查了文档,但无法弄清楚我做错了什么。有什么方法可以让 Lithium 根据使用的模型将我的文件存储在单独的集合中?

(如果我的术语不准确,我深表歉意;这是我第一次尝试在基础教程之外使用 Lithium 和 MongoDB。)

4

2 回答 2

2

但是,如果不是将 pdf 存储在 fs.files 下,而是将它们存储在 fs.files.pdfs 下,那就太好了。这是因为我计划将 jpeg 和文本文档也存储在同一个数据库中。

目前,您无法命名您的来源,fs.files.pdfs但是pdfs.files...photos.files

我已经检查了文档,但无法弄清楚我做错了什么。有什么方法可以让 Lithium 根据使用的模型将我的文件存储在单独的集合中?

看看这里突出显示的行:https ://github.com/UnionOfRAD/lithium/blob/master/data/source/MongoDb.php#L387-390

这是锂如何处理的

于 2012-09-17T08:11:03.867 回答
0

是的,我相信我们在 IRC 上讨论过这个问题。这是 MongoDB 的一个限制,我不相信您可以拥有多个 GridFS 前缀(如果我错了,请有人纠正我)。

如果您只是在寻找一种通过不同模型操作不同文件类型的方法,我建议您创建单独的模型,然后修改它们的默认查询以包含'type' => 'pdf'在条件中,或者类似的东西。

于 2012-09-28T19:23:14.077 回答