Выполнить второе условие, если результат первого запроса не найден в MongoDB

#mongodb #mongoose

#mongodb #мангуст

Вопрос:

Имея в виду, что первый запрос должен выполняться первым, а второй должен быть активирован только в том случае, если первый возвращает пустой результат.

 db.collection.findOne({a:'xyz',b:'xy',c:'x'});
db.collection.findOne({a:'xyz',b:'xy',c:null});
  

и еще одно здесь я написал два отдельных запроса, поэтому я хочу удовлетворить вышеуказанное в одном запросе.

Я пробовал с $ и $ или, но он не работает должным образом. пример:-

 db.collection.findOne({$or:[{a:'xyz',b:'xy',c:'x'},{a:'xyz',b:'xy',c:null}]});
  

но здесь, если обе записи присутствуют в БД, то выполняется каждый раз, когда выполняется второй.

Комментарии:

1. Вы пробовали изменить порядок ваших запросов? Если вы всегда получаете второе, сделайте второе своим первым, и проблема решена.

Ответ №1:

Вы могли бы попробовать:

 db.collection.find({a:'xyz', b:'xy', c: { $in: ["x", null] } }).sort({c: -1}).limit(1);
  

Приведенный выше запрос находит все документы, для которых c либо "x" , либо равно null. Затем он сортирует по убыванию c , что приведет к размещению нулевых результатов в конце. Ограничивая использование 1 документа limit(1) , это означает, что мы получим обратно c: "x" документ, если он существует, в противном случае мы получим обратно нулевой документ.