我在Windows平台上。我有一个shell脚本,当cronjob将此文件删除时,它将删除整个数据库。
文件为
delete.sh
#!/usr/bin/env mongo
mongo 127.0.0.1:27021/test --eval "db.dropDatabase()"
假设我有一个名为“ Doctor”的集合,现在我不想删除该表。
任何想法如何做到这一点。
我们可以在这里使用--excludeCollection吗?
答案 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上工作。