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对象中的键?
答案 0 :(得分:1)
也许stringify
可能派上用场。假设1和3被称为data1
和data3
。重置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);