【问题标题】:Sails.js query for waterline associationSails.js 查询水线关联
【发布时间】:2015-05-15 14:36:40
【问题描述】:

在sails.js 中,我有一个Post 模型,它与另一个名为“tag”的模型具有多对多关联

帖子模型

module.exports = {

    attributes: {
      title:        'string',
      content:      'string',
      coverImage:   'string',
      owner: {
          model: 'user'
      },
      tags: {
          collection: 'ContentTag',
                 via: 'posts',
            dominant: true // ---
      }
    }

};

标签模型

module.exports = {

  attributes: {
      name: 'string',
      posts: {
          collection: 'post',
          via: 'tags'
      }
  }
};

现在我想获取具有相同标签的相关帖子。我尝试使用 .populate('tags') 和 .populate('tags',{name: ['tag1','tag2']) 但我不知道如何解决。

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    您可以反转您的查询

    Tags.find({name:['tag1','tag2']}).populate('posts')

    【讨论】:

    • 是的,我试过 bus 结果是一组带有相关帖子的标签,而不仅仅是一组帖子。所以我必须解析所有结果以巩固......非常低效。
    • 效率低下是的。但目前最有效的方法是使用 Native / Query 方法。如果您想使用水线,那么您将不得不执行类似Tags.find({name:['tag1','tag2']}).populate('posts').exec(function(err,tagsWPosts){posts = tagsWPosts.map(function(tag){if(tag.posts.length>0)return posts})}) 的操作。但是,这个问题正在处理中,我相信下一个版本的水线应该会解决这个问题。
    • 嗨 Meeker,我知道水线中的功能请求,但由于我们不知道何时发布,我想我会尝试实施您的解决方案。谢谢你的帮助,你的 javascript 肯定比我的强 :)
    • 另一种解决方案是在您的 Posts 模型中创建一个方法,该方法以较低效率的方式返回帖子,然后您可以在发布该功能时轻松替换该代码。
    猜你喜欢
    • 2015-12-14
    • 2014-12-14
    • 2014-09-27
    • 2016-01-11
    • 2014-05-21
    • 2015-02-28
    • 1970-01-01
    • 2015-06-07
    • 2015-01-03
    相关资源
    最近更新 更多