22

如何查询具有多个条件的表?以下是两个都有效的示例:

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()

,但它不起作用。
sequelize 等待的语法是什么?

节点调试 说:

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

如果重要的话……

4

5 回答 5

26

你可以做:

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} })
于 2014-07-15T11:01:24.687 回答
10

做就是了:

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

或者你需要一个或查询?

于 2012-05-31T20:46:22.703 回答
7

请注意,截至本帖和 2015 版续集,上述答案已过时。我正在发布我正在努力的解决方案,希望能节省一些时间。

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

注意 JSON 对象中的 $ 和数组,并且缺少 ? 代币替换。

或者换一种更一般的方式,因为这可能会帮助人们理解它:

{ $and: [{"Key1": "Value1"}, {"Key2": "Value2"}] }
于 2015-04-29T18:52:19.960 回答
5

这给了我 SELECT `id`, `title`, `description`, `test`, `published`, `createdAt`, `updatedAt` FROM `tests` AS `test` WHERE (`test`.`title` LIKE '%3%' OR `test`.`description` LIKE '%2%');

exports.findAll = (req, res) => {
    const title = req.query.title;
    const description = req.query.description;
    Tutorial.findAll({
            where: {
                [Op.or]: [{
                        title: {
                            [Op.like]: `%${title}%`
                        }
                    },
                    {
                        description: {
                            [Op.like]: `%${description}%`
                        }
                    }
                ]
            }
        })
        .then(data => {
            res.send(data);
        })
        .catch(err => {
            res.status(500).send({
                message: err.message || "Some error occurred while retrieving tutorials."
            });
        });

};
于 2020-04-14T21:49:20.857 回答
4

新版本中试试这个

Post.findAll({
  where: {
    authorId: 12,
    status: 'active'
  }
}).then(function (data) {
    res.status(200).json(data)
            })
   .catch(function (error) {
                res.status(500).json(error)
   });;
于 2017-02-01T22:08:20.327 回答