查找数据库中键的出现次数

时间:2016-06-22 07:00:07

标签: mongodb

您好我是MongoDB的新手,我正在尝试通过在包含10000多个文档的现有数据库中运行查询来学习它。

这包括用户文档,关键字“usertype”为“FACULTY”或“STUDENT”。

在尝试查找具有相应usertypes的文档计数时,我得到以下结果

  

db.user.find({“usertype”:“FACULTY”})。count()   391

     

db.user.find({“usertype”:“STUDENT”})。count()   8846

然而,在尝试查找我得到的文件总数时

  

db.user.find()。COUNT()   9289

如何查找丢失的52份文件。我确信所有文档都具有键值“usertype”

我尝试使用usertype NULL搜索文档。但计数是0。

我尝试了以下内容来检查是否存在未知的usretypes

  

db.user.distinct(“usertype”)[“ADMIN”,“HOD”,“FACULTY”,“STUDENT”,“alternate”]   db.user.find({“usertype”:“HOD”)。count()......>   db.user.find({“usertype”:“ADMIN”})。count()6   db.user.find({“usertype”:“alternate”})。count()17   db.user.find({“usertype”:“HOD”})。count()28   db.user.find({“usertype”:“FACULTY”})。count()391   db.user.find({“usertype”:“STUDENT”})。count()8846   8846 + 391 + 28 + 17 + 6 9288   db.user.find()。count()9289。

同样,1个文档似乎丢失了。并且没有使用usertype =“null” -

的文档

2 个答案:

答案 0 :(得分:0)

你可以尝试不等于$ ne的条件

db.user.find( { usertype: { $ne: "FACULTY", $ne: "STUDENT" } } )

答案 1 :(得分:0)

首先,您可以检查单个集合中usertype字段的不同值,并将结果返回到数组中。使用 distinct 方法:

db.users.distinct("usertype")

返回数组后,您可以使用它来构建一个聚合管道,它可以为每个字段值提供单独的计数:

var usertypes = db.users.distinct("usertype"),
    groupOperator = { "$group": { "_id": null } };

usertypes.forEach(function (type){ 
    groupOperator["$group"][type.toLowerCase()] = { 
       "$sum": { 
           "$cond": [ { "$eq": [ "$usertype",  type ] }, 1, 0] 
       }
   }
});

db.users.aggregate([groupOperator]);

您还可以尝试其他几个查询来检测其他52个文档:

var usertypes = ["FACULTY", "STUDENT"];
db.users.find({ "usertype": { "$nin": usertypes, "$exists": true } });

或查找没有usertype字段的文档的其他查询:

db.users.find({ "usertype": { "$exists": false } })