gpt4 book ai didi

mongodb - 如何使用 Mongo 控制台从 MongoDB 的 GridFS 中删除文件(以类似事务的方式)

转载 作者:可可西里 更新时间:2023-11-01 09:47:05 48 4
gpt4 key购买 nike

我需要删除一堆存储在 Mongo 的 GridFS 中的早于给定日期的文件。这意味着我需要从 fs.filesfs.chunks 集合中删除。

我正在考虑编写一个函数,从 fs.files 中找到所有符合搜索条件的文档,遍历它们并在循环中从 fs.chunks 匹配 fs.files 中相应文档的 files_id 值,但是,根据文档:

MongoDB supports atomic operations on single documents. MongoDB does not support traditional locking and complex transactions

这让我觉得我建议的方法可能不正确。

我知道我可以使用其中一个客户端驱动程序来直接操作 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 中,因此如果您先删除它并且在删除 block 时出现错误,至少没有任何东西可以引用这些 block 。

为了安全起见,您可以有一个后台作业,它遍历 block 集合的 files_id 字段(它是索引的,所以它应该很快)并确保所有 files_id 与 fs 中的文档匹配。文件集合。如果它们不存在并且它们不是最近创建的(您可以从 _id 字段中获取它们创建时的时间戳),则可以删除它们。 (你不想删除最近创建的 block ,以防它们是当前正在插入的文件的一部分。)

关于mongodb - 如何使用 Mongo 控制台从 MongoDB 的 GridFS 中删除文件(以类似事务的方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859122/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com