Так что я сошла с ума от ошибки и дважды сохранила множество документов, потому что испортила идентификатор своего документа. Поскольку я сделал Вставку, я умножал свои документы каждый раз, когда я их сохранял. Поэтому я хочу удалить все дубликаты, кроме первого, который я написал. К счастью, у документов есть неявный уникальный ключ (match._id
), и я должен быть в состоянии сказать, какой был первый, потому что я использую идентификатор объекта.
Документы выглядят так:
{
_id: "5e8e2d28ca6e660006f263e6"
match : {
_id: 2345
...
}
...
}
Итак, сейчас у меня есть агрегат, который сообщает мне, какие элементы дублируются, и сохраняет их в коллекции. Конечно, есть более элегантный способ, но я все еще учусь.
[{$sort: {"$_id": 1},
{$group: {
_id: "$match._id",
duplicateIds: {$push: "$_id"},
count: {$sum: 1}
}},
{$match: {
count: { $gt: 1 }
}}, {$addFields: {
deletableIds: { $slice: ["$duplicateIds", 1, 1000 ] }
}},
{$out: 'DeleteableIds'}]
Теперь я не знаю, как действовать дальше, так как в агрегациях нет операции «удалить», и я Я не хочу записывать эти временные данные в БД только для того, чтобы я мог написать команду удаления с этим, поскольку я хочу удалить их в одном go. Есть ли другой способ сделать это? Я все еще учусь на mongodb и чувствую себя немного ошеломленным: /