如何防止特定集合不删除

时间:2019-04-08 11:38:34

标签: mongodb

我在Windows平台上。我有一个shell脚本,当cronjob将此文件删除时,它将删除整个数据库。

文件为

delete.sh

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

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

任何想法如何做到这一点。

  

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

1 个答案:

答案 0 :(得分:1)

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

您可以做的是改为删除集合。使用db.getCollectionNames并将它们一一删除(不包括您要保留的内容)。

例如与filter

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上工作。