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

时间:2012-06-19 05:06:14

标签: javascript json mongodb bson

Mongo数据库shell(通过运行使用JS文件):

运行'find'命令后, 我必须找出结果中有多少重复行。 由于集合可以有不同的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”和“Date”键。 我想忽略“_id”,因为它是特定的mongo,我想忽略“Date”,因为这是我的要求。

钥匙本身也很多样。在每个JSON文档中,键名都有所不同,键值对的数量也各不相同。

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

我该怎么做?

如何枚举bson对象中的键?

1 个答案:

答案 0 :(得分:1)

也许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);

的内容