Я изо всех сил, чтобы найти хороший способ выполнения соединения MongoDB find()
со следующими критериями:MongoDB: возвращает документ, если другой не существует
- запрос будет соответствовать один документ на основе критериев поиска
- Если совпадение найдено, этот документ будет возвращен
- Если совпадение не найдено, в документе будет возвращен другой документ. Этот второй документ будет соответствовать другому набору критериев.
- Запрос в идеале должен вернуть ровно одну запись независимо от того, что.
В моем конкретном случае у меня есть коллекция users
, которая содержит список пользователей и связанные с ними разрешения. Он также содержит специальную запись для псевдо-пользователя guest
, который содержит разрешения по умолчанию. Этот документ guest
является тем, который необходимо вернуть, если точное совпадение пользователя не выполняется.
Я пробовал использовать {$or: [ { id: "bob" }, {id: "guest" } ]}
, а также { id: { $in: [ "bob", "guest" ] } }
, но оба эти поиска последовательно собираются и возвращают либо «боб», либо «гость», в зависимости от того, в который был вставлен первый.
Есть ли способ явно указать find bob
или в качестве резервного, вернуть документ guest
?
Имейте в виду, что это будет выполнено из Node.js, поэтому я ищу чистый & простой способ разгрузить это MongoDB.
Я понимаю, что это можно сделать как два запроса, но я хотел бы избежать этого сценария, если это возможно.
Спасибо!
Хмм, я не знал, что '$ cond' существует. Это может просто сделать это, хотя конечный результат будет очень долгим. Интересно, есть ли альтернативный способ без агрегации ... – mstubbies