@ Цезарь Это стоило написать, потому что ты не будешь последним спрашивать об этом. Люди уже спрашивают его сейчас, кто еще не знает, что эти функции "преобразования" идут. Как только он достигнет производства, я бы ожидал, что количество людей, пытающихся его увеличить, только увеличится. Так что "спасибо за вопрос", я думаю.

аюсь запустить$graphLookup как показано на рисунке ниже:

Цель состоит в том, чтобы, учитывая конкретную запись$match там), восстановить его полный путьimmediateAncestors свойство. Как видите, этого не происходит.

Я ввел$convert здесь, чтобы иметь дело с_id из коллекции какstringполагая, что это можно было бы "сопоставить" с_id изimmediateAncestors список записей (который являетсяstring).

Итак, я запустил еще один тест с другими данными (нетObjectIdучаствует):

db.nodos.insert({"id":5,"name":"cinco","children":[{"id":4}]})
db.nodos.insert({"id":4,"name":"quatro","ancestors":[{"id":5}],"children":[{"id":3}]})
db.nodos.insert({"id":6,"name":"seis","children":[{"id":3}]})
db.nodos.insert({"id":1,"name":"um","children":[{"id":2}]})
db.nodos.insert({"id":2,"name":"dois","ancestors":[{"id":1}],"children":[{"id":3}]})
db.nodos.insert({"id":3,"name":"três","ancestors":[{"id":2},{"id":4},{"id":6}]})
db.nodos.insert({"id":7,"name":"sete","children":[{"id":5}]})

И запрос:

db.nodos.aggregate( [
  { $match: { "id": 3 } },
  { $graphLookup: {
      from: "nodos",
      startWith: "$ancestors.id",
      connectFromField: "ancestors.id",
      connectToField: "id",
      as: "ANCESTORS_FROM_BEGINNING"
    }
  },
  { $project: {
      "name": 1,
      "id": 1,
      "ANCESTORS_FROM_BEGINNING": "$ANCESTORS_FROM_BEGINNING.id"
    }
  }
] )

... который выводит то, что я ожидал (пять записей прямо и косвенно связаны сid 3):

{
    "_id" : ObjectId("5afe270fb4719112b613f1b4"),
    "id" : 3.0,
    "name" : "três",
    "ANCESTORS_FROM_BEGINNING" : [ 
        1.0, 
        4.0, 
        6.0, 
        5.0, 
        2.0
    ]
}

Вопрос в том, есть ли способ достичь цели, о которой я говорил в начале?

Я использую Mongo 3.7.9 (из официального Docker)

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

Ответы на вопрос(1)

Ваш ответ на вопрос