Использование условного выражения для извлечения одного документа в mongodb - PullRequest
0 голосов
/ 27 августа 2018

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

Спасибо

 tester = await Test.findOne(
                { $cond: {
                    if: {mainId},---> check if not null 
                    then: {'mainId': data.mainId},
                    else: {'subId': data.subId} 
                 }});

1 Ответ

0 голосов
/ 27 августа 2018

Вы должны использовать «и» и «или» вместе. У вас будет два подзапроса: 1. И (существует и mainID совпадает) 2. (соответствие subID) Два подзапроса выше будут ORed.

Mongo неявно использует оператор '$ and', если вы используете оператор в том же поле. Таким образом, запрос может быть еще более упрощен до:

Test.findOne({ 
    $or:[ 
        { 'mainId' :  { $exists : true, $eq: data.mainId }  }, 
        { 'subId' : data.subId  } 
    ] } );

Оператор $ eq означает равный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...