2012-06-19 45 views
0

蒙戈DB殼(通過使用JS文件上運行):蒙戈DB殼,怎麼算重複條目集合

運行的「查找」命令, 後,我必須找出多少結果中有重複的行。 由於集合可以有不同的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對象中的鍵?

+0

我認爲你可以運行一個map-reduce來達到這個目的......你想返回什麼?只是一個不同的屬性映射數組,每個都有一個數量? – McGarnagle

+0

check mongodb Map reduce here http://www.mongodb.org/display/DOCS/MapReduce – Dhiraj

回答

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 

有一些梅索德在做同樣的,如果我沒有記錯的外殼稱爲friendlyEqual。在這種情況下,你應該可以使用像這樣的東西:var eq = friendlyEqual(data1,data3);

+0

其實,我得到這個錯誤: JSON沒有定義。有什麼我需要做的使用JSON對象。 – user1455545

+0

嘗試使用'friendlyEqual'來代替。請參閱shell API文檔:http://api.mongodb.org/js/current/symbols/_global_.html#friendlyEqual – KooiInc

+0

超級,它工作。謝謝。 – user1455545