[LARAVEL] MongoDB find duplicate row - fourslickz/notes GitHub Wiki

use App\Models\YourModel;
use Illuminate\Support\Facades\DB;

$duplicates = YourModel::raw(function($collection) {
    return $collection->aggregate([
        [
            '$group' => [
                '_id' => '$field_name', // or use ['field1' => '$field1', 'field2' => '$field2'] for multiple fields
                'count' => ['$sum' => 1],
                'docs' => ['$push' => '$$ROOT']
            ]
        ],
        [
            '$match' => [
                'count' => ['$gt' => 1]
            ]
        ]
    ]);
});

foreach ($duplicates as $duplicate) {
    $docs = $duplicate->docs;
    array_shift($docs); // Keep the first document and remove it from the array

    foreach ($docs as $doc) {
        YourModel::where('_id', $doc->_id)->delete(); // Delete the remaining duplicate documents
    }
}

echo "Removed duplicates successfully.";