MongoDB: удалить «потерянные» документы?

#mongodb #join #orphan

#mongodb #Присоединиться #сирота

Вопрос:

Я пытаюсь удалить потерянные документы в mongodb, которые пересекают коллекции. В коллекции «значения» у меня есть такие документы:

 value:
{
   resultId: <ObjectId>
   ...other data..
}
 

какие ссылочные документы в коллекции «результаты»:

 result:
{
   _id: <ObjectId> //the resultId
}
 

Ряд «результирующих» документов был удален, в результате чего остались потерянные «ценные» документы. Как я могу найти все сироты и удалить их?

Ответ №1:

Что вам нужно будет сделать, так это создать агрегированный конвейер и использовать $lookup оператор для получения соответствующего результирующего документа. Затем добавьте $match оператор в свой конвейер aggregate, чтобы отфильтровать те, у которых нет соответствующего результирующего объекта.

 db.values.aggregate([
  {
    $lookup: {
      from: "results",
      localField: "resultId",
      foreignField: "id",
      as: "resultDocument"
    }
   },
   { $match: { resultDocument: null }}
])
 

Таким образом, вы определили свои потерянные документы и можете удалить их впоследствии.