使用Sails.js水线

时间:2015-10-17 03:49:42

标签: node.js sails.js waterline

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

  • 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这样的调用应该可行,但是,它似乎无法检索任何结果。

我做错了吗?是否有一种不同的方法能够以有效的方式产生预期的结果?

1 个答案:

答案 0 :(得分:1)

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