Выполнение массового удаления в MongoDB может быть частым требованием при управлении большими наборами данных. Операция поиска в MongoDB позволяет объединять данные из нескольких коллекций на основе общего поля. В этой статье мы рассмотрим различные методы эффективного выполнения массового удаления с помощью поиска в MongoDB.
Метод 1: использование этапов конвейера агрегации $lookup и $match
db.sourceCollection.aggregate([
{
$lookup: {
from: "targetCollection",
localField: "_id",
foreignField: "sourceId",
as: "matchingDocuments"
}
},
{
$match: {
matchingDocuments: []
}
},
{
$project: {
_id: 1
}
}
]).forEach(function(doc) {
db.sourceCollection.deleteOne({_id: doc._id});
});
Метод 2. Использование API массовой записи
var bulkOps = [];
db.sourceCollection.aggregate([
{
$lookup: {
from: "targetCollection",
localField: "_id",
foreignField: "sourceId",
as: "matchingDocuments"
}
},
{
$match: {
matchingDocuments: []
}
}
]).forEach(function(doc) {
bulkOps.push({
deleteOne: {
filter: {_id: doc._id}
}
});
if (bulkOps.length === 1000) {
db.sourceCollection.bulkWrite(bulkOps);
bulkOps = [];
}
});
if (bulkOps.length > 0) {
db.sourceCollection.bulkWrite(bulkOps);
}
Метод 3: использование этапов конвейера агрегации $lookup и $out
db.sourceCollection.aggregate([
{
$lookup: {
from: "targetCollection",
localField: "_id",
foreignField: "sourceId",
as: "matchingDocuments"
}
},
{
$match: {
matchingDocuments: []
}
},
{
$out: "tempCollection"
}
]);
db.tempCollection.renameCollection("sourceCollection", true);
db.tempCollection.drop();
Массовое удаление с помощью поиска в MongoDB можно выполнить различными методами. Первый метод использует этапы конвейера агрегации $lookup и $match для идентификации и удаления совпадающих документов. Второй метод использует API массовой записи для эффективного пакетного удаления. Наконец, третий метод использует этапы конвейера агрегации $lookup и $out для создания временной коллекции без соответствующих документов, а затем меняет коллекции местами. Выберите метод, который лучше всего соответствует вашему варианту использования и размеру набора данных, чтобы оптимизировать производительность массового удаления.