it-swarm.com.de

Finden Sie doppelte Datensätze in MongoDB

Wie finde ich doppelte Felder in einer Mongo-Sammlung?.

Ich möchte überprüfen, ob eines der "Name" -Felder doppelt vorhanden ist.

{
    "name" : "ksqn291",
    "__v" : 0,
    "_id" : ObjectId("540f346c3e7fc1054ffa7086"),
    "channel" : "Sales"
}

Danke vielmals!

84
Chris

Benutze die Aggregation für name und erhalte name mit count > 1:

db.collection.aggregate(
    {"$group" : { "_id": "$name", "count": { "$sum": 1 } } },
    {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }, 
    {"$project": {"name" : "$_id", "_id" : 0} }
)

So sortieren Sie die Ergebnisse nach den meisten bis wenigsten Duplikaten:

db.collection.aggregate(
    {"$group" : { "_id": "$name", "count": { "$sum": 1 } } },
    {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }, 
    {"$sort": {"count" : -1} },
    {"$project": {"name" : "$_id", "_id" : 0} }     
)

Wenn Sie einen anderen Spaltennamen als "name" verwenden möchten, ändern Sie "$ name" in "$ column_name".

157
anhlc

Sie können die list von duplicate Namen mit der folgenden aggregate Pipeline finden:

  • Group alle Datensätze mit ähnlichen name.
  • Match die groups mit Datensätzen größer als 1.
  • Dann group erneut project alle doppelten Namen als array.

Der Code:

db.collection.aggregate([
{$group:{"_id":"$name","name":{$first:"$name"},"count":{$sum:1}}},
{$match:{"count":{$gt:1}}},
{$project:{"name":1,"_id":0}},
{$group:{"_id":null,"duplicateNames":{$Push:"$name"}}},
{$project:{"_id":0,"duplicateNames":1}}
])

o/P:

{ "duplicateNames" : [ "ksqn291", "ksqn29123213Test" ] }
20
BatScream

Die Antwort, die anhic gab, kann sehr ineffizient sein, wenn Sie über eine große Datenbank verfügen und der Attributname nur in einigen Dokumenten vorhanden ist.

Um die Effizienz zu verbessern, können Sie der Aggregation eine $ -Match hinzufügen.

db.collection.aggregate(
    {"$match": {"name" :{ "$ne" : null } } }, 
    {"$group" : {"_id": "$name", "count": { "$sum": 1 } } },
    {"$match": {"count" : {"$gt": 1} } }, 
    {"$project": {"name" : "$_id", "_id" : 0} }
)
7
Juanín