您好我是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” -
的文档答案 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 } })