#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"
документ, если он существует, в противном случае мы получим обратно нулевой документ.