0

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 的,我想忽略“Date”,因为这是我的要求。

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

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

我该怎么做呢?

如何从 bson 对象中枚举键?

4

1 回答 1

1

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

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

friendlyEqual如果我没记错的话,shell 中调用了一些方法。在这种情况下,您应该能够使用类似的东西:var eq = friendlyEqual(data1,data3);

于 2012-06-19T05:33:55.703 回答