mongodb - 如何防止特定收藏不被删除
问题描述
我在windows平台上。我有一个shell脚本,当cronjob cal这个文件时删除整个数据库。
文件是
delete.sh
#!/usr/bin/env mongo
mongo 127.0.0.1:27021/test --eval "db.dropDatabase()"
假设我有一个名为“Doctor”的集合现在我不想删除该表。
任何想法如何实现这一点。
我们可以在这里使用 --excludeCollection 吗???
解决方案
没有这样的标志。删除数据库意味着删除整个数据库。如果您需要至少保留一个集合,则需要保留数据库。没有数据库,集合就不存在。
您可以做的是删除集合。使用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 上工作的。
推荐阅读
- python - web-scrape:获取 H4 属性和 href
- sql - 没有交叉乘积重复的 SQL 百分比完成查询
- python - 检查字符串是否是字谜
- javascript - Number.isNaN 不适用于输入验证
- python - 使用 pandas 一次分配多个滚动总和
- javascript - 迭代对象数组以按键分组和嵌套对象数组
- assembly - AVR - GNU 链接器脚本 - 如何获取 .data 部分的加载地址
- wordpress - 如何摆脱 mimilcnf.pro 容器
- regex - 在每个提取的字符串之前添加一个单词
- docker - 具有 Windows AD 身份验证的无根 docker