mongodb - Mongodb:遍历所有数据库和集合以查找使用的字段(键)?
问题描述
我在 mongo 中有一组数据库,每个数据库都有一组集合。我需要遍历所有数据库和集合以查找是否在任何集合中使用了键。通过谷歌搜索,我可以遍历数据库和集合。但我无法找到是否在任何集合中使用了某个键。以下是我在 mongodb shell 中执行的脚本。
db = db.getSiblingDB("admin");
var dbs = db.runCommand({ "listDatabases": 1 }).databases;
dbs.forEach(function(database) {
db = db.getSiblingDB(database.name);
cols = db.getCollectionNames();
cols.forEach(function(col) {
db[col].find({}).forEach(function(field) {
//print(field);
if( field == "testKey"){
print(col + " has column")
}
});
});
});
如果字段等于“testKey”,我该如何更正此脚本,然后打印该数据库和集合。目前,即使我在某些集合中有“testKey”,这也不会进入 if 条件。
解决方案
请注意,find
返回文档列表,因此实际上您需要对该文档的键进行另一次迭代。
db = db.getSiblingDB("admin");
var dbs = db.runCommand({ "listDatabases": 1 }).databases;
dbs.forEach(function (database) {
db = db.getSiblingDB(database.name);
cols = db.getCollectionNames();
cols.forEach(col =>
db[col].find({}).forEach(doc =>
Object.keys(doc).forEach(key => {
print(key === 'testKey')
})
)
)
});
推荐阅读
- javascript - 如果浮点数小于 1,如何删除它的第一个数字
- java - 如何在子类测试中模拟超级方法?
- android - 查找具有多对一关系的实体对查询参数使用错误的 id
- c++ - static_assert 失败:结构的大小与所有属性的大小之和不同
- android - firebase实时数据库不在线更新
- javascript - 必填字段错误,当我通过 python 请求或 Ajax 请求发送数据时
- sparkr - 有没有办法将 SparkR 数据帧行限制为 1000000?
- javascript - 访问解析的 CSV 数据,CSV-Parser Node.js
- r - 如何检查不同的数据具有相同的列。带循环的名字
- c - _Complex 上的波浪号“~”运算符,它有什么作用?是扩展吗?