【问题标题】:Efficient queries across several models using Sails.js waterline使用 Sails.js 水线跨多个模型的高效查询
【发布时间】:2015-10-17 03:49:42
【问题描述】:

我正在尝试找到一种有效的方法来检索分布在多个模型中的结果。在我的示例中,我有三个模型:

  • Video 存储视频数据,包括视频的创建者
  • User 存储用户数据
  • Follower 存储了哪些用户关注了哪些其他用户

我的模型的简化版本如下所示:

// Video.js

module.exports = {

attributes: {
    title: {
      type: 'string'
    },
    creator: {
      model: 'User'
    }
  }
};


// User.js

module.exports = {

  attributes: {
    user_name: {
      type: 'string'
    }
  }
};


 // Follower.js

module.exports = {

  attributes: {
    user: {
      model: 'User'
    },
    follower: {
      model: 'User'
    }
  }
};

我意识到我可以将多对多关联作为Collection 直接存储在User 中,但我也会存储其他值,例如用户何时开始关注另一个用户以及他从哪个目的地开始关注所以。另外,我存储了很多类似的数据,我想保留VideoUser这样的核心模型。

所以现在我正在尝试获取由给定用户关注的用户创建的 10 个最新视频(创建日期时间存储在由水线自动添加的 createdAt 属性中)。

从这个给定的用户(我们称他为queryingUser)开始,我正在尝试获取他关注的所有用户并将它们用作搜索视频的输入。我想象一个电话看起来像这样:

Follower.find({where: {follower: queryingUser} , select: ['user']}).exec(function (err, users){

    var userArray = [];

    for (var i=0; i< users.length; i++) userArray.push(users[i].user);

    Video.find({ where: {creator: userArray}, limit: 10, sort: 'createdAt DESC' }).exec(function (err, videos){
        // videos should contain the desired result
    });
});

我认为根据waterline docs,这样的调用应该可以工作,但是,它似乎没有检索到任何结果。

我做错了吗?有没有一种不同的方法可以有效地达到预期的结果?

【问题讨论】:

    标签: node.js sails.js waterline


    【解决方案1】:

    没关系,它确实有效。我在代码的其他地方犯了一个错误,但在我修复它之后,我得到了这个例子。也许它对其他人仍然有帮助。

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 2014-09-27
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多