2016-03-08 36 views
5

首先,我是mongo的新手,所以我不知道多少,我不能刪除重複的行,因爲有一些依賴關係。Mongo與全行對象的區別查詢

我存儲在蒙戈

{'id': 1, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'}, 
{'id': 2, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'}, 
{'id': 3, 'key': 'pehnvosjijipehnvosjijipehnvosjijipehnvosjijipehnvosjiji', 'name': 'some name', 'country': 'IN'}, 
{'id': 4, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'}, 
{'id': 5, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'} 

以下數據可以看到一些行是重複使用不同的ID 只要它會解決這個問題,從輸入我必須處理它的輸出。

我需要在以下方式中的數據:

{'id': 1, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'}, 
{'id': 3, 'key': 'pehnvosjijipehnvosjijipehnvosjijipehnvosjijipehnvosjiji', 'name': 'some name', 'country': 'IN'}, 
{'id': 4, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'} 

我查詢

keys = db.collection.distinct('key', {}) 
all_data = db.collection.find({'key': {$in: keys}}) 

正如你可以看到它有兩個查詢了相同的結果集請把它結合起來,一個作爲數據庫非常大

我也可能在key上創建一個​​,但是這個值很長(152個字符),它不會幫助我。

或者它會?

+0

的可能的複製(http://stackoverflow.com/questions/ [從MongoDB中刪除重複] 31557053/remove-duplicates-from-mongodb) –

+0

在「刪除」部分中可能不是「完全」,但肯定是在識別部分。基本上你需要在公共字段上使用'$ group',然後用'$ first'返回任何其他的輔助字段 –

回答

5

您需要爲此使用聚合框架。有多種方法可以做到這一點,下面的解決方案採用了$$ROOT變量獲得的第一個文檔的每個組:

db.data.aggregate([{ 
    "$sort": { 
    "_id": 1 
    } 
}, { 
    "$group": { 
    "_id": "$key", 
    "first": { 
     "$first": "$$ROOT" 
    } 
    } 
}, { 
    "$project": { 
    "_id": 0, 
    "id":"$first.id", 
    "key":"$first.key", 
    "name":"$first.name", 
    "country":"$first.country" 
    } 
}])