javascript - Sails.js Waterline 查询(按关联)

标签 javascript database node.js sails.js waterline

我正在使用 Sails.js 开发和应用程序,并使用 Waterline orm for db。我正在为用户开发功能,让他们可以互相发送好友请求和其他类似请求。为此,我有以下 URequest 模型:

    module.exports = {

    attributes: {
        owner: {
            model: 'Person'
        },

        people: {
            collection: 'Person'
        },

        answers: {
            collection: 'URequestAnswer'
        },

        action: {
            type: 'json'    //TODO: Consider alternative more schema consistent approach.
        }
    }
};

基本上,owner 是与发出请求的人的关联,而 people 是与请求所针对的所有 Person 的一对多关联。到目前为止一切顺利。

现在我想要一个 Controller ,它返回所有涉及特定用户的请求,这意味着用户在所有者字段中或在人中的所有请求。我如何查询“给我所有与 P 有关联的行”?换句话说,我怎么知道哪些 URequest 模型与某个人有关联?

我试过这样的:

getRequests: function (req, res) {
    var personId = req.param('personId');
    URequest.find().where({
    or: [
        {people: [personId]},   //TODO: This is not correct
        {owner: personId}
        ]
}).populateAll().then(function(results) {
        res.json(results);
    });

},

所以我知道如何做“或”部分,但我如何检查 personId 是否在 people 中?我知道我应该能够以某种方式查看连接表,但我不知道如何也无法从与我的情况相关的 Waterline 文档中找到很多。此外,我试图保持这种与数据库无关的状态,尽管我使用的是 MongoDB,但以后可能会使用 Postgres。

最佳答案

老实说,这是一个棘手的问题,据我所知,使用 Waterline 无法实现您尝试执行的操作,因此如果您使用的是基于 sql 的适配器或 native ,或者尝试进行一些手动过滤。手动过滤取决于您处理的数据集有多大。

我的想法立即开始稍微修改您的数据模型,也许您有一个存储关联的表而不是集合。像这样:

module.exports = {

attributes: {
    owner: {
        model: 'URequest'
    },

    person: {
        model: 'Person'
    }
}

使用 sailsjs 模型方法(如 beforeCreate),您可以根据需要自动创建这些关联。

祝你好运,我希望你能成功!

关于javascript - Sails.js Waterline 查询(按关联),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635407/

相关文章:

javascript - 如何从另一个函数更改任何函数组件的状态?

node.js - 无法运行 ionic 。收到 "No command ' ionic' found"

android - 在文件资源管理器 (DDMS) 中找不到 db 文件

database - 乔姆拉! 3.2 - 从与其他选择的结果连接的表中选择

php - 如何从html删除按钮中删除mysql数据?

node.js - 是否可以在Azure中运行npx工具来执行包

.net - SQL Server 数据库插入/更新 TCP 通知

javascript - 如何知道函数是否异步?

javascript - 行下方的 Bootstrap 行的宽度变小

javascript - Toastr 实现,在 IE 10 中显示错误后