【问题标题】:Get the count of the number of documents in a Collection Mongodb获取集合中文档数的计数 Mongodb
【发布时间】:2015-08-10 09:41:59
【问题描述】:

有没有办法在单个查询中列出所有集合名称和每个集合的文档计数?

我能找到的仅给出特定集合的计数。 例如,如果Users 是一个集合,那么

db.Users.count()

会给我集合中文档的数量Users

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    在shell中你需要做的就是:

    db.getCollectionNames().map(function(name) { 
        return { "name": name, "count": db[name].count() } 
    })
    

    没有“命令”,也没有“单一”集合查询(从技术上讲,它仍然是为每个集合进行的多个查询,以及一个“源”查询),因为这不是 MongoDB 存储数据的方式。但是有一个简单的程序方法,基本上所有驱动程序都可以使用。

    【讨论】:

    • 所以查询是db.getCollectionNames.map() ?
    • @Vaulstein db.getCollectionNames() 本身就是一个函数,它执行系统命令以返回“集合信息”。结果是适合 JavaScript 中 .map() 运算符的条件数组。正如你应该在这里“看清楚”。 .count() 针对返回的每个集合运行。这就是“它是如何工作的”。正如我所说,每个驱动程序都可以使用相同的命令来返回“收集信息”。
    【解决方案2】:

    如果你只想打印数字和计数,那么你可以使用 forEach。

    db.getCollectionNames().forEach(function(colName){
      print(colName+": "+db.collection(colName).count());
    });
    

    如果你想将它用于任何其他操作,那么你可以使用地图功能。

    db.getCollectionNames().map(function(colName){
      return {
        "columnName":colName,
        "count":db.getCollection(colName).count()
      }
    });
    

    【讨论】:

      【解决方案3】:

      不,没有。你必须使用

      var collections = db.runCommand({
        listCollections:1,
        filter:{ name:{ $not: /^system\..*/ } }
      })
      

      获取用户创建的所有集合并遍历这些集合

      for (var index = 0; index < collections.length; index++) {
          var current = collections[index];
          var doccount = db.runCommand({collStats:current,scale:1024,verbose:true}).count;
          print(current + ":" + doccount);
      }
      

      【讨论】:

      • 为什么投反对票?只是好奇。所有其他解决方案包括system.indexes,并且使用map 也可以有效地处理多个查询。
      猜你喜欢
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多