Хорошо, плохо, я пытался с $ in, но забыл перебирать курсор ... Это именно то, что мне нужно, просто нужно запустить тест производительности, чтобы увидеть реальный выигрыш! Есть ли у вас какие-либо рекомендации по индексам для такого запроса?

я есть следующая схема в моемtaxon коллекция:

{ 
  "_id": 1, 
  "na": [ "root_1",
        "root_2",
        "root_3" ], 
  "pa": 1 
},{
  "_id": 2, 
  "na": [ "name_1", 
        "name_2", 
        "name_3"], 
  "pa": 1
},{
  "_id": 4, 
  "na": [ "otherName_1", 
        "otherName_2", 
        "otherName_3"],
  "pa": 2
}

Каждый документ связан с другим родительским полем, которое соответствует_id его родителя.

Я хотел бы выполнить рекурсивный поиск, чтобы получить следующий результат:

{ "_id": 4, 
  "nameList": [ "otherName_1",
              "name_1",
              "root_1"]
} 

Из документа с определенным_idполучить первый предметna массив каждого родителя до документа с_id: 1 достигнут

В настоящее время я получаю этот результат, выполняя X-запросы (например, по одному родительскому документу, здесь 3, например), но я почти уверен, что этого можно достичь с помощью одного запроса. Я уже посмотрел на новый$ graphLookup оператор, но не смог справиться с этим ...

Можно ли добиться этого в одном запросе с использованием MongoDB 3.4.1?

редактировать

Я бы запустил это для 50 документов каждый раз, поэтому оптимальным решением было бы объединить все в одном запросе

например, это будет выглядеть

var listId = [ 4, 128, 553, 2728, ...];
var cursor = db.taxon.aggregate([
  {$match: 
     { _id: {$in: listId}}
  }, ...
)];  

и вывел бы:

[{ "_id": 4, 
  "nameList": [ "otherName_1",
              "name_1",
              "root_1"]
}, { "_id": 128, 
  "nameList": [ "some_other_ame_1",
              "some_name_1",
              "root_1"]
}, { "_id": 553, 
  "nameList": [ "last_other_ame_1",
              "last_name_1",
              "root_1"]
} ... ]

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

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