javascript - 使用 MEAN 堆栈查询关联模型

标签 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 } }

在我的公共(public) Epics Controller 中,我试图查询具有当前 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)
} 

最佳答案

你也在使用 Mongoose 吗?我会使用“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);

关于javascript - 使用 MEAN 堆栈查询关联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21634548/

相关文章:

javascript - Angular UI Typeahead - 手动清除/隐藏下拉列表

javascript - 即使在 href 重定向之后如何使用 setTimeout 循环?

node.js - Node JS : How to create custom variables?

node.js - 运行 vs-mda-remote 时出错

sql-server - 在查询完成之前发送响应

node.js - 在 Mongoose 预保存 Hook 中获取模型/集合的名称

javascript - Bootstrap 词缀导航栏 scrollspy 问题

javascript - 在mvc中播放.mp4视频时如何停止 slider ?

MongoDB super 用户身份验证总是失败

mysql - 连接两个集合并在 MongoDB 中更新