У меня есть flag
и key
.
Если flag
является true
Я хочу перечислить документы, чье поле name
содержит key
.
Otherwise- если flag
является false
- Я хочу, чтобы найти ключ на name
или surname
полей.
Здесь приведен пример сбора;
{id: 1, name: "green" , surname: "brown"},
{id: 2, name: "black" , surname: "brown"},
{id: 3, name: "brown" , surname: "yellow"}
если флаг: true, key: brown, я ожидаю;
{id: 1, name: "green" , surname: "brown"},
{id: 2, name: "black" , surname: "brown"},
{id: 3, name: "brown" , surname: "yellow"}
если флаг: false, ключ: коричневый, я ожидаю;
{id: 3, name: "brown" , surname: "yellow"}
Как это найти, используя $ cond?
Я могу сделать это как;
if(flag){
db.collection.find({name: key})
}else{
db.collection.find({$or: [{name: key}, {surname: key}])
}
Возможно ли это? Но это порождает ошибку. Как я могу редактировать?
db.collection.find({$cond: [ if: { flag }, then: {$or: [{name: "brown"}, {surname: "brown"}]}, else: {name: "brown"} ]})
' $ cond' - оператор условной агрегации. Он не будет работать с обычными запросами. Может быть, лучше сохранить эту логику на стороне клиента. – Veeram