2012-05-29 3 views
15

Как я могу выполнить запрос к таблице с несколькими условиями? Вот примеры оба работают:node.js sequelize: несколько условий запроса «где»

Post.findAll({ where: ['deletedAt IS NULL'] }).success() 

и

Post.findAll({ where: {topicId: req.params.id} }).success() 

Тогда, если мне нужно условия в сочетании, я чувствую, что мне нужно сделать что-то вроде

Post.findAll({ where: [{topicId: req.params.id}, 'deletedAt IS NULL'] }).success() 

, но не работает.
Каков синтаксис, который ожидает сиквел?

узел отладки говорит:

DEBUG: TypeError: Object # has no method 'replace'

, если это имеет значение ...

ответ

3

Пожалуйста, обратите внимание, что в этих проводках и самая последняя версия sequelize, вышеупомянутые ответы устарели. Я отправляю решение, в котором я работал, в надежде спасти кого-то некоторое время.

filters["State"] = {$and: [filters["State"], {$not: this.filterSBM()}] }; 

Обратите внимание на сумму $ и массив внутри объекта JSON и отсутствие? замена токена.

Или, в более общем виде, так как это может помочь кому-то обернуть голову вокруг него:

{ $and: [{"Key1": "Value1"}, {"Key2": "Value2"}] } 
8

Вобще:

Post.findAll(
    { where: ["topicId = ? AND deletedAt IS NULL", req.params.id] } 
).success() 

Или вам нужен или запрос?

+0

Its И что мне нужно, и ваше решение прекрасно соответствует моим потребностям, поэтому спасибо. – Masquer

+0

Я должен сказать, что это очевидно, что вы сделали там, как бы я не сделал этого сам?) Но это больше похоже на обходной путь, мне все же интересно, что бы я сделал, если бы оба условия имели параметры? Или, если будет больше условий? Sequelize manuals ничего не имеет в таких случаях ... – Masquer

+0

Nvm, я только узнал, что может быть несколько параметров, предоставленных впоследствии для '?' S. Еще раз спасибо) – Masquer

20

Вы можете сделать:

Post.findAll({ where: {deletedAt: null, topicId: req.params.id} }) 

Каким будет переведены на deletedAt IS NULL

Кстати, если вам нужно deletedAt NOT IS NULL, используйте:

Post.findAll({ where: {deletedAt: {$ne: null}, topicId: req.params.id} }) 
+0

Пожалуйста, обновите свой ответ, чтобы проверить несколько, где, показ показывает только одно условие, когда ему нужно проверить номер и значение null. –

0

В новой версии попробовать этот

Post.findAll({ 
    where: { 
    authorId: 12, 
    status: 'active' 
    } 
}).then(function (data) { 
    res.status(200).json(data) 
      }) 
    .catch(function (error) { 
       res.status(500).json(error) 
    });; 
Смежные вопросы