Mongo DB shell,如何计算集合中的重复条目

Mongo DB shell, how to count duplicate entries in a collection

本文关键字:集合 计算 shell DB 何计算 Mongo      更新时间:2023-09-26

Mongo DB shell(通过使用JS文件运行):

运行"查找"命令后,我必须找出结果中有多少重复行。由于集合可以具有不同的 JSON,因此我必须解析每个 JSON 对象进行比较。

简而言之,如何枚举来自 bson 对象的键?

例如,如果我们查看以下 4 个 JSON 条目:

// 1
{
    "_id" : ObjectId("1"),
    "Date" : "2012-06-17",
    "k1" : "v1",
    "k2" : "v2",
    "k3" : "v3",
    "k4" : "v4",
}
// 2
{
    "_id" : ObjectId("2"),
    "Date" : "2012-06-17",
    "key1" : "v1",
    "key2" : "v2",
}
// 3
{
    "_id" : ObjectId("3"),
    "Date" : "2012-06-18",
    "k1" : "v1",
    "k2" : "v2",
    "k3" : "v3",
    "k4" : "v4",
}
// 4
{
    "_id" : ObjectId("4"),
    "Date" : "2012-06-18",
    "rk1" : "v1",
    "rk2" : "v2",
    "bk3" : "v3",
    "bk4" : "v4",
    "ck5" : "v5",
    "ck6" : "v6",
}

我想在比较时忽略"_id"和"日期"键。我想忽略"_id",因为它是 mongo 特定的,我想忽略"日期",因为它是我的要求。

钥匙本身是多种多样的。在每个 JSON 文档中,键名称不同,键值对的数量也不同。

在上述情况下,我希望"1"和"3"被识别为相同(重复)。

我该怎么做?

如何枚举来自 bson 对象的键?

也许stringify可能会派上用场。假设 1 和 3 称为 data1data3 .重置 id 和日期,您将能够比较它们:

data1._id = null;
data3._id = null;
data1.Date = null;
data3.Date = null;
var eq = JSON.stringify(data1)  === JSON.stringify(data3); //=> true

如果我没记错的话,shell 中有一些叫做 friendlyEqual 的方法也可以做同样的事情。在这种情况下,您应该能够使用以下内容:var eq = friendlyEqual(data1,data3);