Sails.js水线延期

时间:2016-10-14 11:30:18

标签: mongodb sails.js

我是sails.js和MongoDB的新手。感谢您阅读我的问题。

我真的很麻烦。

场合

我有User db,Report db,Post db。

我想获取报告数据并填充父数据报告数据的帖子数据。我还想从发布数据中获取用户数据。

换句话说,我想获得双嵌套数据。

Report
  |_ post
      |_user

这是我在ReportController.js中的findReports操作

findReports: function(req, res) {
    Report.find().populateAll().sort({createdAt: -1}).exec((er, reports) => {
      if (er) return res.negotiate(er)
      const rs = reports
      console.log('rs : ', rs)
      rs.forEach((report) => {
        if(report.post) {
          User.findOne({id: report.post.user}).exec((er, user) => {
            report.post.user = user
            console.log("before rs : ", rs)
          })
          console.log("report.post.user : ", report.post.user)
          console.log("after rs : ", rs)
        } else {
          report.comment.user = User.findOne({id: report.comment.user}).exec((er, user) => {
            report.commet.user = user
          })
        }
      })
      console.log("final rs : ", rs)
      res.view('dashboard/reports/index', { reports: rs })
    })
  },

当我运行我的代码时,在我的控制台中,结果按照以下顺序打印。

  1. "在rs:..(blah)之后......" - 我不想......
  2. "最后的rs:..(等等).." - 我不想......
  3. "在rs:..(blah)之前......" - 我想得到这个rs!但是当我的res.view("仪表板....",{reports,rs})是2的结果。
  4. 我认为" User.find"方法与整个逻辑无关。

    我真的遇到了麻烦。任何建议都会非常有帮助。请给我一些建议。

1 个答案:

答案 0 :(得分:0)

水线形式SailsJS不支持deepPopulation。因此,您必须使用另一个,而不是ORM:Offshore

示例:

Report.find().populate("post.user").exec((err, data) => {
 // ur code here
})