【问题标题】:Mongo DB shell, how to count duplicate entries in a collectionMongo DB shell,如何计算集合中的重复条目
【发布时间】:2012-06-19 05:06:13
【问题描述】:

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 对象中枚举键?

【问题讨论】:

  • 我认为您可以运行 map-reduce 来实现这一点……您想要返回什么?只是一组不同的属性映射,每个属性映射都有一个计数?
  • 在这里查看 mongodb Map reduce mongodb.org/display/DOCS/MapReduce

标签: javascript json mongodb bson


【解决方案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);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2020-01-26
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多