使用MEAN堆栈查询关联模型

时间:2014-02-07 17:53:15

标签: javascript node.js mongodb angularjs express

我正在尝试使用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)
} 

2 个答案:

答案 0 :(得分:1)

你还在使用猫鼬吗?我会使用" ref"和#34;填充"。 首先你有一个TaskSchema。

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

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

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);

答案 1 :(得分:0)

看起来你需要帮助调试xhr。让我们跟踪步骤:

  • 您的请求是否已发送到服务器?
  • 是否到达正确的快速路线?
  • 您的服务器端代码是否针对Mongo执行了正确的查找操作?
  • Mongo会回归正确的结果吗?
  • 您是否正确地将Mongo的结果写入响应?
  • 您是否可以使用浏览器的开发工具检查网络流量,从而在客户端上看到响应?
  • 您是否正确处理了承诺成功?

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