Как мне удалить поддерево, хранящееся в mongodb, с родительской ссылкой

#mongodb #mongodb-query #spring-data-mongodb

#mongodb #mongodb-запрос #spring-data-mongodb

Вопрос:

У меня есть коллекция, в которой хранятся данные дерева в виде документов mongo db с родительскими ссылками, как описано в https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-parent-references /

Мой вопрос в том, как мне удалить узел (документ) и все документы под этим узлом (дочерний элемент дочернего элемента и т. Д.) С помощью запроса mongodb. Я не хочу анализировать и извлекать все идентификаторы и удалять их. Есть ли какой-либо запрос mongo mongo, который мог бы помочь мне удалить все поддерево, взяв родительскую ссылку в качестве начального параметра.

Заранее спасибо!

Приветствия

Комментарии:

1. если ответ был полезным, пожалуйста, хотя бы дайте отзыв.

2. Я был в отпуске, поэтому не смог его протестировать. Это помогает. Большое спасибо!

Ответ №1:

Немного сложно представить, о чем вы думаете, но вы можете запустить self $graphLookup и получить список документов на основе этой иерархии.

Вы можете проверить пример, который я написал здесь

Конвейер

 db.collection.aggregate({
  $match: {
    _id: "Books"
  }
},
{
  "$graphLookup": {
    "from": "collection",
    "startWith": "$_id",
    "connectFromField": "_id",
    "connectToField": "parent",
    "as": "ids"
  }
},
{
  $project: {
    "ids": {
      $map: {
        input: "$ids",
        as: "id",
        in: "$id._id"
      }
    },
    "_id": 0
  }
})
 

Тогда вам просто нужно что-то вроде этого:

 db.coll.deleteMany({"_id":{$in:[listHere]}})
 

В этот список вам нужно добавить родительский узел.