Использование запроса в качестве выражения в совокупности - PullRequest
0 голосов
/ 20 января 2020

Мне нужно использовать обычный запрос фильтра в качестве выражения в $cond условии в совокупности.

Например, использовать это «условие», которое будет использоваться в качестве фильтра

'$and':[{'foo':'xxx'},{'bar':'zzz'}]

как это «условие», эквивалентная форма, которая будет использоваться в агрегации

'$and'[{'$eq':['$foo','xxx']},{'$eq':['$bar':'zzz']}]

Причина этого заключается в том, что у меня хранятся определенные фильтры, и в какой-то момент мне нужно проверить их на некоторых документах, но поскольку существует несколько из них, из соображений производительности, я хочу избежать выполнения нескольких последовательных запросов поиска, поэтому его можно использовать следующим образом:

aggregate([
    { 
        $match: { <match the document> } 
    },
    { 
        $project: {
            0: {$cond: [ <filter0>, true, false]},       
            1: {$cond: [ <filter1>, true, false]},
            2: {$cond: [ <filter2>, true, false]},
            ....
        }
    }
])

То, чего я хочу достичь с помощью запроса в $cond, - это гарантированная согласованность результат с его использованием в $ match или в find ()

Так что мне нужно, по сути, 'inverse $ expr'.

1 Ответ

1 голос
/ 20 января 2020

Вы можете использовать $facet для выполнения нескольких запросов к одним и тем же данным.

aggregate([
    { 
        $match: { <match the document> } 
    },
    { 
        $facet: {
            0: [{$match: {query0}}],       
            1: [{$match: {query1}}],
            2: [{$match: {query2}}],
            ....
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...