Zduplikowane rekordy można grupować za pomocą potoku agregacji:
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"}
])
Po wykonaniu potoku agregacji theCollectionWithoutDuplicates
kolekcja zawiera dokument dla każdej grupy oryginalnych zduplikowanych dokumentów, z nowym _id
- możesz zweryfikować dane wyjściowe, usuwając oryginalną kolekcję (db.theCollection.drop()
) i zmień nazwę nowej kolekcji (db.theCollectionWithoutDuplicates.renameCollection('theCollection')
). Usunięcie i zmianę nazwy można łączyć w db.theCollectionWithoutDuplicates.renameCollection('theCollection', true)
.
WYJAŚNIENIE użycia potoku agregacji:
db.theCollection.aggregate([])
wykonuje potok agregacji, otrzymując listę etapów agregacji do wykonania$group
etap grupuje dokument według pól określonych jako kolejne_id
pole$project
etap zmiany nazw pól, spłaszczanie zagnieżdżonego_id
poddokumenty tworzone przez$group
$out
etap przechowuje agregację wynikowych dokumentów do danej kolekcji