如何删除MongoDB数据库中的文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除MongoDB数据库中的文件相关的知识,希望对你有一定的参考价值。
一、Insert操作
Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键。文档结构采用类似JSON的BSON格式。常见的插入操作主要有单条插入和批量插入两种形式。插入时只是简单地将文档存入数据库中,不进行额外的验证,也不会执行代码,所以不存在注入式攻击的可能。
1、单条插入
2、批量插入
MongoDB对批量插入的支持是通过传递多个文档组成的数组到数据库来实现的。由于它插入数据是通过发送TCP请求的,这样只需发送单个TCP请求,且数据库无需处理大量的消息头,减少插入时间。这种方式的批量插入一次只能将多个文档插入到一个集合中,对于插入到多个集合可以循环调用Insert操作。
二、Remove操作
remove函数可以用来删除数据,能接受一个文档作为可选参数,只有符合条件的文档才会被删除。删除数据是永久性的,不能撤销,也不能恢复,需要谨慎。删除文档需要清空整个集合,不如直接删除集合快。
三、Update操作
update函数用于修改数据库中的数据,接收两个参数,一个是查询文档,用来查找要更新的文档,另一个是修改器文档,用来描述对找到的文档做哪些修改。更新操作是原子性的,如果多个更新同时发生,则所有的更新都会执行,但最后的更新是最终赢家。
1、整体更新(文档替换)
2、局部更新(修改器)
部分更新是通过原子的更新修改器实现的,使用修改器时除了”_id“的值不能改变,其他任何值都能改变。文档替换是可以改变所有值的。
$inc修改器:将指定属性的值增加特定的步长,如果键不存在则创建。
$set修改器:用来指定一个键的值,如果不存在则创建。
$push:数组修改器,如果指定的键存在,则向已有的数组末尾加入一个元素,键不存在则会创建一个新的数组。
3、upsert操作
upsert操作具有saveOrUpdate的功能,如果没有文档符合更新条件,则以更新条件和更新文档为基础创建一个新的文档。如果有符合更新条件的文档,则正常更新。创建新文档时会以条件文档作为基础,将修改器作用其之上。upsert操作是原子性的,高效的。
四、瞬间完成
上面的插入,删除和更新操作都是瞬间完成的,不需要等待数据库响应。这样的实现可以获取高性能,速度非常快,只会受客户端发送速度和网络速度的制约。但由于不会获取服务器状态,所以不能保证操作顺利完成。这对于付费系统,安全性较高的系统是不可行的,此时对这些操作需要使用的安全版本。安全版本会在操作执行后立即运行getLastError命令,来检查是否执行成功。如果失败一般会抛出可捕获的异常,然后可以在代码中处理。
参考技术A 先把文件名和uploaddate存到一个表里 读取表中大于当前时间1小时就记录 然后再从GridFS里删除对应的文件本回答被提问者采纳 参考技术B mongodb文件只增不减的,如果想删除只能把旧数据全部复制到新数据库中,然后删掉旧数据库,再手动删除旧数据库的文件。如何删除 MongoDB 中的所有数据库?
【中文标题】如何删除 MongoDB 中的所有数据库?【英文标题】:How to drop all databases in MongoDB? 【发布时间】:2018-07-25 14:16:39 【问题描述】:我的 MongoDB 中有一个数据库列表。如何删除除local
、admin
和config
之外的所有数据库?
【问题讨论】:
有趣。似乎没有以代码友好的方式枚举数据库(或其名称)的方法。有一个用于集合,但不是数据库。 如果你知道名字,那很简单:db.getSiblingDB('Marks').dropDatabase()
。所以你可以简单地硬编码这些名字。
检查一下[***.com/questions/3366397/…
@SergioTulentsev 实际上有一种方法可以做到这一点,只是没有正式记录。请在下面查看我的答案。
【参考方案1】:
您可以在mongo
shell 中使用getDBNames()
方法。
必须从Mongo()
instance 调用此方法。不幸的是,我认为getDBNames()
方法没有记录在案。
获取数据库名称后,您可以循环访问它们以删除不需要的名称,例如:
Mongo().getDBNames().forEach(function(x)
// loop through all the database names
if (['admin', 'config', 'local'].indexOf(x) < 0)
// drop database if it's not admin, config, or local
Mongo().getDB(x).dropDatabase();
)
例如:
> show dbs
admin 0.000GB
config 0.000GB
local 0.001GB
test 0.000GB
test2 0.000GB
test3 0.000GB
> Mongo().getDBNames().forEach(function(x)
... if (['admin', 'config', 'local'].indexOf(x) < 0)
... Mongo().getDB(x).dropDatabase();
...
... )
> show dbs
admin 0.000GB
config 0.000GB
local 0.001GB
【讨论】:
【参考方案2】:我使用 tutorial 修复了这个解决方案
我在我的 mongo shell 中运行了这段代码
var dbs = db.getMongo().getDBNames()
for(var i in dbs)
db = db.getMongo().getDB( dbs[i] );
if (db.getName() !== 'admin' && db.getName() !== 'local')
print( "dropping db " + db.getName() );
db.dropDatabase();
【讨论】:
谢谢。这很有用以上是关于如何删除MongoDB数据库中的文件的主要内容,如果未能解决你的问题,请参考以下文章