首页 > 解决方案 > 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 条件。

标签: mongodb

解决方案


请注意,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')
            })
        )
    )
});

推荐阅读