我的模型看起来像这样:
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文件列表,每个文件包含一堆pdfs,并将pdf添加到数据库中。
当我保存模型时,pdf确实会添加到数据库中。我可以从MongoDB控制台查看所有pdf,即db.fs.files.find()
。我也可以使用mongofiles命令从数据库中获取pdf。
然而,如果不是将ffs文件保存在fs.files下,它将真的很好,我可以将它们存储在fs.files.pdfs下。这是因为我还计划在同一个数据库中存储jpeg和文本文档。
如果我将类中的$ _meta更改为array('source' => 'fs.files.pdfs')
,我的控制台命令似乎输出将pdf文档发送到终端而不是添加它(随便,我想知道为什么锂会这样做!)
我检查了文档,但无法弄清楚我做错了什么。有没有办法让Lithium根据所使用的型号将我的文件存储在不同的集合中?
(如果我的术语不准确,我很抱歉;这是我第一次尝试在基本教程之外使用Lithium和MongoDB。)
答案 0 :(得分:2)
但是,如果不将ffs文件保存在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
以下是Lithium如何处理
答案 1 :(得分:0)
是的,我相信我们在IRC上讨论了这个问题。这是MongoDB的限制,我不相信你可以拥有多个GridFS前缀(如果我错了,有人会纠正我。)
如果你只想找到一种通过不同模型操作不同文件类型的方法,我建议创建单独的模型,然后在条件中修改他们的default queries以包含'type' => 'pdf'
,或者某事沿着这些路线。