【问题标题】:How can I properly structure this Sequelize query?如何正确构建此 Sequelize 查询?
【发布时间】:2017-05-10 02:19:00
【问题描述】:

我要做的是通过用户名查找用户,并包括他们是否是当前用户的朋友。

我想尝试使用一个查询来执行此操作,这样我就可以减轻服务器上的负载。我倾向于相信,在通过用户名获取用户后,我将不得不进行另一次查询,以查看他们是否是朋友。

exports.findUser = (req, res) => {

    //Get the username of the person to find
    var username = req.params.username.toLowerCase();

    if (!username) {
        //No username given
        res.status(400).send();
    } else if (username == req.user.get('username')) {
        //Send back a 400 because we dont want users thinking there is someone with their username
        res.status(400).send()
    }

    //Get a user where the username matches the one given
    db.user.findOne({
        where: {
            username: username
        },
        attributes: [
            "id",
            "username"
        ],
        include: [{
            model: db.friend,
            where: {
                //Or is used because we don't know who created the friendship
                $or: [
                    {
                        friendOneId: NEED THE ID OF THE USER IM SEARCHING,
                        friendTwoId: req.user.get('id')
                    }, 
                    {
                        friendOneId: req.user.get('id'),
                        friendTwoId: NEED THE ID OF THE USER IM SEARCHING
                    }
                ]
             }
        }]
    }).then(function(user) {
        if (user) {
            res.json(user);
        } else {
            res.status(404).send();
        }
    }, function(e) {
        res.status(500).send();
    });
};

这是我要求的朋友模型

module.exports = function(sequelize, DataTypes){
    return sequelize.define('friend', {
        friendOneId: {
            type: DataTypes.INTEGER,
            allowNull: false
        },
        friendTwoId: {
            type: DataTypes.INTEGER,
            allowNull: false
        }
    });
};

【问题讨论】:

  • 与您的问题无关,但您可以省略:.toJSON(),响应中只需要用户
  • 感谢您指出这一点
  • 你能给我们看看你的朋友模型文件吗?还是数据库结构?
  • @DZDomi 我添加了它

标签: node.js database postgresql sequelize.js


【解决方案1】:

据我所知,您只需从查询的不同 OR 部分中删除 AND,所以基本上:

where : {
     $or: [
         {
             friendTwoId: req.user.get('id')
         },          
         {       
             friendOneId: req.user.get('id'),
         }
     ]
},
required: false

另外如果你将 required 属性设置为 false,查询也会返回所有其他用户,即使包含查询没有显示任何结果

【讨论】:

  • 但这会带走我所有的友谊,对吧?我只是想看看我是否是我正在搜索的用户的朋友
  • 我没有运气
  • 您应该详细说明您的问题,我的查询显示了什么?
  • 我在一个我正在搜索的用户是朋友的帐户上尝试了这个。它只是给了我一个空的朋友数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多