Это то, что я использую.
module.exports.getBookByName = function(name,callback){
var query = {
name: {$regex : name}
}
User.find(query,callback);
}
Я бы сделал это следующим образом:
select a.RespondentId
from Answers a
when (question, answer) in ( ('Big', 'Yes'), ('Children', 'Yes') )
group by RespondentId
having count(*) = 2 ;
Это легко обобщить на:
with qa as (
select v.*
from (values ('Big', 'Yes'), ('Children', 'Yes')
) v(question, answer)
select a.RespondentId
from Answers a join
qa
on a.question = qa.question and a.answer = qa.answer
group by RespondentId
having count(*) = (select count(*) from qa);
Это довольно обобщенно. Вы могли бы даже организовать CTE для получения массива или аргумента json и разбора на отдельные значения сравнения.
Вы можете проверить результат, имеющий счет = 2 для строк, которые соответствуют вопросу и ответ, где условие
select RespondentId
from Answers
when question in ( 'Big', 'Children')
and Answer ='Yes'
group by RespondentId having count(*) = 2
Я думаю, что вы ищете, чтобы развернуть стол. Существуют разные синтаксисы для разных баз данных. Вы эффективно превращаете значения столбца «Вопрос» в собственные столбцы, а затем ищете строки, соответствующие вашим критериям.
Вот неэффективный пример в стандартном SQL, где я создаю одну таблицу для каждого вопроса и объединяю их в одну таблицу, используя RespondentId.
select respondent_id from
(select * from answers where question = 'Big') as big
join
(select * from answers where question = 'Children') as children
on
big.respondent_id = children.respondent_id
where
big.answer = 'Yes'
and
children.answer = 'Yes';