2016-03-08 12 views
5

最初にmongoを新しくしているので、あまり知らないので、いくつかの依存関係のために重複した行を削除することはできません。完全な行オブジェクトを持つMongo Distinct Query

私はあなたが行のいくつかは、限り、それは私が出力にそれに取り組む必要があり、入力からこの問題を解決するために取るように異なるID と重複している見ることができますモンゴ

{'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'} 

に格納されたデータを次のようしています。

私は、次の方法でデータ必要があります:あなたはそれが同じ結果のための2つのクエリは、として一つにそれを組み合わせるしてくださいを設定とり見ることができるように

{'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/ 31557053/remove-duplicate-from-mongodb) –

+0

「削除」部分に「正確に」はないかもしれませんが、確かに識別部分にあります。基本的には、共通フィールドで '$ group'する必要がありますし、' $ first'で他の補助フィールドを返します。 –

答えて

5

このために集約フレームワークを使用する必要があります。これを行うには複数の方法は、以下のソリューションが各グループの最初の文書を取得するために$$ROOT変数を使用して、あります[MongoDBのから重複を削除]の

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" 
    } 
}])