我想删除所有集合,除了一个列表。
db.getCollectionNames().forEach(function(n){db[n].remove({})});
将删除所有集合。
db.getCollectionNames().filter(function(collection){return! /^((keepthisone)|(andthisone)|(alsokeepthisone))$/.test(collection)});
将列出所有的收藏,除了我想保留的。
如何将两者结合起来?
db.getCollectionNames().filter(function(collection){return! /^((keepthisone)|(andthisone)|(alsokeepthisone))$/.test(collection)}).forEach(function(n){db[n].remove({})});
什么也不做。
I wouldmap
thendrop
on items:
db.getCollectionNames().filter(function(collection) {
return !/^((keepthisone)|(andthisone)|(alsokeepthisone))$/.test(collection);
}).map(function(n){
return db.getCollection(n);
}).forEach(function(collection){
collection.drop();
});
我更喜欢这样:
db.getSiblingDB('test').getCollectionNames().filter(
collection => !['keepthisone', 'andthisone', 'alsokeepthisone'].includes(collection)
).forEach( collection => {
db.getSiblingDB('test').getCollection(collection).drop();
});
出于安全原因,您应该使用getSiblingDB(...)
。在运行您的命令之前,您永远不知道用户是否执行了诸如use admin
之类的愚蠢命令。结果会很糟糕。