使用Sails.js进行跨多个模型的高效查询



我试图找到一种有效的方法来检索跨几个模型的结果。在我的例子中,我有三个模型:

  • 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'
    }
  }
};

我意识到我可以直接将多对多关联存储为User中的Collection,但我也存储了其他值,例如用户何时开始关注另一个用户以及他从哪个目的地开始这样做。此外,我存储了大量类似的数据,我希望保持核心模型,如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
    });
});

我认为根据水线文档这样的调用应该工作,然而,它似乎没有检索任何结果。

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

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

相关内容

  • 没有找到相关文章

最新更新