簡體   English   中英

如何使用Mongo控制台從MongoDB的GridFS中刪除文件(以類似事務的方式)

[英]How can I delete files (in a transaction-like manner) from MongoDB's GridFS using the Mongo console

我需要刪除存儲在Mongo的GridFS中的一堆文件,這些文件比給定日期早。 這意味着我需要從fs.filesfs.chunks集合中刪除。

我想編寫一個從找到符合搜索條件的fs.files所有文檔的功能,在它們之間迭代和循環刪除匹配fs.files相應文檔的files_idfs.chunks所有文件,但是,根據文件:

MongoDB支持單個文檔的原子操作。 MongoDB不支持傳統鎖定和復雜事務

這讓我覺得我建議的方法可能不正確。

我知道我可以使用其中一個客戶端驅動程序直接操作GridFS。 例如,使用PHP我可以像這樣實現它:

<?php
$grid = $db->getGridFS('fs');

$grid->remove(array(
    "uploadDate" => array(
        '$lt' => new MongoDate(strtotime("2011-02-01 00:00:00"))
    )
));

...但是我希望僅使用mongo控制台來完成此任務。

那么,刪除文件的首選方法是什么,使用mongo控制台或JS文件來匹配來自兩個集合的fs.files中某個字段的某些條件,為控制台提供信息?

您建議的方法大多是正確的。 唯一指向文件內容的指針是在fs.files中,所以如果你先刪除它並且刪除了一些錯誤,那么至少沒有任何東西可以引用那些塊。

為了安全起見,您可以擁有一個后台作業,該作業通過塊集合的files_id字段(已編制索引,因此應該很快),並確保所有files_ids與fs.files集合中的docs匹配。 如果它們沒有並且它們不是最近創建的(您可以從_id字段獲取它們的時間戳),則可以刪除它們。 (如果它們是當前正在插入的文件的一部分,您不希望刪除最近創建的塊。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM