MongoDB shell: 如何删除数据库中所有 collections 中的特定元素
MongoDB shell: How to remove specific elements in all the collections inside a DB
我想删除所有 collection 中与正则表达式的所有巧合。
我需要这个,因为 JSON 解析器在今天的某个时间点在我的应用程序中失败,现在数据库已损坏。
我可以手动完成,但我有超过 100 多个 collection,并且手动输入 mongo shell
db["X"].remove({ "DateTime": { $regex : "2015-11-16" } })
对应每个 collection 会花费不少时间。
您知道在 mongo shell 中自动执行此操作的任何方法吗?我总是通过 R 中的包 RMongo
访问这个数据库,我可以通过 dbRemoveQuery(rmongo.object, collection, query)
来访问这个数据库,但我想知道它是否可以在 mongo shell 中完成,也许有点更快。
use yourDbName
// Get the names of all collections in the database.
var names = db.getCollectionNames();
// Iterate over every collection name.
for(i = 0; i < names.length; i++) {
// Only issue the query if the collection is not a system collection.
if(!names[i].startsWith("system.")) {
// Issue the query against the collection with the name `names[i]`.
db[names[i]].remove({ "DateTime": { $regex : "2015-11-16" } });
}
}
请注意,我从列表中排除了 system collections。
在mongo shell:
db.getCollectionNames().forEach(function(name) {
db[name].remove({ "DateTime": { $regex : "2015-11-16" } });
})
嗯 .startsWith()
是一项新技术,是 ECMAScript 2015 (ES6) 标准的一部分,因此它可能不适用于 Mongo Shell。
您将需要使用 .filter()
方法来丢弃系统 collections
var collections = db.getCollectionNames().filter(function(collection) {
return collection.indexOf('system.') !== -1;
};
然后在此处删除符合您条件的文档 "DateTime": "2015-11-16"
for(var index=0; index < collections.length; index++) {
db[collections[index]].remove( { 'DateTime': /2015-11-16/ } )
}
我想删除所有 collection 中与正则表达式的所有巧合。
我需要这个,因为 JSON 解析器在今天的某个时间点在我的应用程序中失败,现在数据库已损坏。
我可以手动完成,但我有超过 100 多个 collection,并且手动输入 mongo shell
db["X"].remove({ "DateTime": { $regex : "2015-11-16" } })
对应每个 collection 会花费不少时间。
您知道在 mongo shell 中自动执行此操作的任何方法吗?我总是通过 R 中的包 RMongo
访问这个数据库,我可以通过 dbRemoveQuery(rmongo.object, collection, query)
来访问这个数据库,但我想知道它是否可以在 mongo shell 中完成,也许有点更快。
use yourDbName
// Get the names of all collections in the database.
var names = db.getCollectionNames();
// Iterate over every collection name.
for(i = 0; i < names.length; i++) {
// Only issue the query if the collection is not a system collection.
if(!names[i].startsWith("system.")) {
// Issue the query against the collection with the name `names[i]`.
db[names[i]].remove({ "DateTime": { $regex : "2015-11-16" } });
}
}
请注意,我从列表中排除了 system collections。
在mongo shell:
db.getCollectionNames().forEach(function(name) {
db[name].remove({ "DateTime": { $regex : "2015-11-16" } });
})
嗯 .startsWith()
是一项新技术,是 ECMAScript 2015 (ES6) 标准的一部分,因此它可能不适用于 Mongo Shell。
您将需要使用 .filter()
方法来丢弃系统 collections
var collections = db.getCollectionNames().filter(function(collection) {
return collection.indexOf('system.') !== -1;
};
然后在此处删除符合您条件的文档 "DateTime": "2015-11-16"
for(var index=0; index < collections.length; index++) {
db[collections[index]].remove( { 'DateTime': /2015-11-16/ } )
}