Эффективные способы выполнения массового удаления с помощью поиска в MongoDB

Выполнение массового удаления в 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 для создания временной коллекции без соответствующих документов, а затем меняет коллекции местами. Выберите метод, который лучше всего соответствует вашему варианту использования и размеру набора данных, чтобы оптимизировать производительность массового удаления.