Хорошо, плохо, я пытался с $ 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"]
} ... ]