首页 > 解决方案 > 如何防止特定收藏不被删除

问题描述

我在windows平台上。我有一个shell脚本,当cronjob cal这个文件时删除整个数据库。

文件是

delete.sh

#!/usr/bin/env mongo
mongo 127.0.0.1:27021/test --eval "db.dropDatabase()"

假设我有一个名为“Doctor”的集合现在我不想删除该表。

任何想法如何实现这一点。

我们可以在这里使用 --excludeCollection 吗???

标签: mongodb

解决方案


没有这样的标志。删除数据库意味着删除整个数据库。如果您需要至少保留一个集合,则需要保留数据库。没有数据库,集合就不存在。

您可以做的是删除集合。使用db.getCollectionNames并将它们一一删除,不包括您要保留的那些。

例如使用过滤器

mongo 127.0.0.1:27021/test --eval "db.getCollectionNames().filter(c=>!['Doctor'].includes(c)).forEach(c=>db.getCollection(c).drop())"

或者使用带有查询过滤器的getCollectionInfos :

mongo 127.0.0.1:27021/test --eval "db.getCollectionInfos({name:{$nin: ['Doctor']}}).forEach(({name})=>db.getCollection(name).drop())"

您可能需要转义美元符号$nin。我不记得 shell 脚本是如何在 Windows 上工作的。


推荐阅读