У меня есть следующий документ:
{
_id: 123,
state: "AZ",
products: [
{
product_id: 1,
desc: "P1"
},
{
product_id: 2,
desc: "P2"
}
]
}
Мне нужно написать запрос для возврата одного элемента из массива продуктов, в котором состояние равно «AZ», а product_id равно 2. Если соответствующий product_id нетнайдено, затем верните первый (или любой) элемент из массива products.
Например: если product_id равен 2 (совпадение найдено), то результат должен быть:
products: [
{
product_id: 2,
desc: "P2"
}
]
Еслиproduct_id равен 3 (не найден), тогда результат должен быть:
products: [
{
product_id: 1,
desc: "P1"
}
]
Я смог выполнить одно условие, когда совпадение найдено, но не уверен, как выполнить второе условие в том же запросе:
db.getCollection('test').find({"state": "AZ"}, {_id: 0, state: 0, products: { "$elemMatch": {"product_id": "2"}}})
Я также пытался использовать конвейер агрегации, но не смог найти работающее решение.
Примечание: это отличается от следующего вопроса, так как мне нужно вернуть элемент по умолчанию, еслисовпадение не найдено: Получить только запрашиваемый элемент в массиве объектов в коллекции MongoDB