#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 }}
])
Таким образом, вы определили свои потерянные документы и можете удалить их впоследствии.