【问题标题】:Querying associated models using MEAN stack使用 MEAN 堆栈查询关联模型
【发布时间】:2014-02-07 17:53:15
【问题描述】:

我正在尝试使用 MEAN 设置模型关联,其中 Epic 有许多任务。我先创建 Epic,然后在创建任务时关联它。与 Epic 关联的任务数据模型如下所示:

task:
   { name: 'my first task',
     epic:
      { name: 'My fist epic',
        _id: 52f511c605456ba4c936180d,
        __v: 0},
     _id: 52f511d605456ba4c936180e,
     __v: 0 } }

在我的公共 Epics 控制器中,我尝试使用当前 Epic 的 ID 查询所有任务,但我运气不佳。下面的查询返回所有任务,而不是与我的 Epic 关联的任务。

Tasks.query({“epic._id": $routeParams.epicId}, function(tasks) {
    $scope.tasks = tasks;
});

有没有更好的方法来使用 MEAN 进行关联和检索?我有点菜鸟。 提前致谢!

编辑: 我一直在尝试在创建新任务时更新史诗的想法。在 app/controllers/tasks.js 我有这段代码不起作用。

exports.create = function (req, res) {
  var task = new Task(req.body)
  Epic.find(req.body.epic.id, function (err, epic) {
    if (err) return next(err)
    epic.tasks.push(task.id);
    epic.save();
  })
  task.save()
  res.jsonp(task)
} 

【问题讨论】:

    标签: javascript node.js mongodb angularjs express


    【解决方案1】:

    你也在使用猫鼬吗?我会使用“ref”和“populate”。 首先你有一个TaskSchema。

    var TaskSchema = new Schema({  ...  });
    mongoose.model('Task', TaskSchema);  
    

    添加模型等,然后在其他模式中引用它。我将添加 1 个或多个任务的示例。

    var Schema = new Schema({
       task: {
        type: Schema.ObjectId,
        ref: 'Task'
       },
       tasks: [
         { type: Schema.Types.ObjectId, ref: 'Task'}
       ]
    });
    

    然后用 populate 调用它。

    this.findOne({
        _id: id
    }).populate('tasks').exec(cb);
    

    【讨论】:

    • 谢谢你的建议,迪伦。我正在使用猫鼬。根据我的项目,另一个模式将是 Epic 的父模式,对吧?如果我按照您的建议在创建新任务时如何更新史诗模型?在您的建议中,您列出了我假设在任务已经与史诗关联后渲染有用的“填充”方法。我在想也许我应该尝试从服务器端控制器中的 create 方法中查找和更新父史诗以执行任务。想法?
    【解决方案2】:

    您似乎需要帮助调试 xhr。让我们跟踪步骤:

    • 您的请求是否发送到服务器?
    • 它是否到达正确的快速路线?
    • 您的服务器端代码是否对 Mongo 执行正确的查找操作?
    • Mongo 是否返回了正确的结果?
    • 您是否将 Mongo 的结果正确写入响应?
    • 您能否通过使用浏览器的开发工具检查网络流量来查看客户端的响应?
    • 您是否正确处理了承诺成功?

    您需要发布更多信息和代码才能知道问题出在哪里。

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 2017-06-24
      • 2017-06-30
      • 2015-12-30
      • 2017-11-22
      相关资源
      最近更新 更多