[英]How to store files of different types in separate collections using Lithium and GridFS?
我有一個看起來像這樣的模型:
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;
}
}
static函數獲取zip存檔的全名和存檔中文件的名稱,創建模型,從存檔文件加載內容,設置一些元數據並返回模型。 這用於我正在編寫的控制台命令,它將遍歷一個zip文件列表,每個文件包含一堆pdfs,並將pdfs添加到數據庫中。
當我保存模型時,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。)
但是,如果不將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
這是鋰電處理的方式
是的,我相信我們在IRC上討論過這個問題。 這是MongoDB的限制,我不相信你可以擁有多個GridFS前綴(如果我錯了,有人會糾正我)。
如果你只是想找到一種通過不同模型操作不同文件類型的方法,我建議創建單獨的模型,然后修改它們的默認查詢以在條件中包含'type' => 'pdf'
,或者沿着這些線條。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.