如何收集MongoDB集合列表和每个集合的字段并将其存储到数组中?

时间:2019-07-04 07:40:08

标签: mongodb

我需要一个数组,其中包含我的MongoDB数据库集合及其具有数据类型的字段。

数组是这样的:

data table array

我知道在SQL Server中可以使用INFORMATION_SCHEMA访问表字段信息,但是我不知道MongoDB中的情况。

非常感谢。

1 个答案:

答案 0 :(得分:0)

第一件事:MongoDB是无模式的,没有表。在MongoDB中,每个集合可以具有非常不同类型的项目。您可以将两个完全不同的项目存储在同一集合中。但是,如果确定它具有相同的结构,则可以使用一些技巧来获取数据。

使用以下代码获取所有字段名称:

db.collection.aggregate([
{
    $project: {
      data: {
        $objectToArray: "$$ROOT"
      }
    }
  },
  {
    $project: {
      data: "$data.k"
    }
  },
  {
    $unwind: "$data"
  },
  {
    $group: {
      _id: null,
      keys: {
        $addToSet: "$data"
      }
    }
  },
  {
    $unwind: "$keys"
  },
  {
    $project: {
      _id: 0,
      key: "$keys"
    }
  }
])

给出的结果为:

[
  {
    "key": "egg"
  },
  {
    "key": "type"
  },
  {
    "key": "hello"
  },
  {
    "key": "_id"
  }
]

您可以使用以下结果通过聚合获取每个字段的类型:

db.Garments.aggregate( 
   { "$project": { "fieldType": {  "$type": "$_id"  } } } //use fieldName from previous results
)

返回如下内容:

{ 
    "_id" : ObjectId("4c0ec11e8fd2e65c0b010000"), 
    "fieldType" : "string" 
}

还有其他使用Map-Reduce函数的方法,这里是一个示例:Using map/reduce for mapping the properties in a collection