sql >> Databasteknik >  >> NoSQL >> MongoDB

Ta bort dubbletter av poster från mongodb 4.0

Du kan gruppera dubblerade poster med hjälp av aggregeringspipeline:

db.theCollection.aggregate([
   {$group: {_id: {item: "$item", qty: "$qty", size: "$size", status: "$status"}}},
   {$project: {_id: 0, item: "$_id.item", qty: "$_id.qty", size: "$_id.size", status: "$_id.status"}},
   {$out: "theCollectionWithoutDuplicates"}
])

Efter exekveringen av aggregeringspipeline, theCollectionWithoutDuplicates samlingen innehåller ett dokument för varje grupp av original duplicerade dokument, med en ny _id - du kan verifiera resultatet och ta bort originalsamlingen (db.theCollection.drop() ) och byt namn på den nya samlingen (db.theCollectionWithoutDuplicates.renameCollection('theCollection') ). Släpp och byt namn kan kombineras i db.theCollectionWithoutDuplicates.renameCollection('theCollection', true) .

FÖRKLARING av aggregeringspipelineanvändning:

  1. db.theCollection.aggregate([]) exekverar en aggregeringspipeline, tar emot en lista över aggregeringssteg som ska köras
  2. $group steg grupperar dokument efter fält som anges som efterföljande _id fältet
  3. $project steg ändrar fältnamn, plattar ut kapslade _id underdokument producerade av $group
  4. $out scenen lagrar aggregerade dokument i en given samling


  1. Hur gör man icke-CRUD och icke-grundläggande MongoDB-kommandon i ObjCMongoDB?

  2. Få distinkta ISO-datum efter dagar, månader, år

  3. Mongo - möjligt i fråga att projicera underfält till toppnivå?

  4. Java-drivrutinmotsvarighet för JavaScript-skalets Object.bsonsize( doc )?