比较两次API调用的结果,并在MEAN应用中返回它们的差值

时间:2018-07-19 07:21:17

标签: angularjs mongoose mean

  

编辑:由于找不到正确的解决方案,因此我更改了   应用程序的结构有点,并发布了另一个问题:   Mongoose - find documents not in a list

我有一个MEAN应用,具有三个模型:UserTask,并且为了跟踪哪个任务分配给我拥有的UserTask用户,它看起来像这样:< / p>

const mongoose = require("mongoose");
const autopopulate = require("mongoose-autopopulate");

const UserTaskSchema = mongoose.Schema({
  completed: { type: Boolean, default: false },
  userId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
    autopopulate: true
  },
  taskId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Task",
    autopopulate: true
  }      
});
UserTaskSchema.plugin(autopopulate);

module.exports = mongoose.model("UserTask", UserTaskSchema);

在我的前端应用程序中,我具有AngularJS服务,并且我已经具有用于获取所有用户,所有任务以及分配给特定用户的任务的功能(通过使用给定的UserTasks获取所有userId。例如:

// user-task.service.js
function getAllUserTasksForUser(userId) {
  return $http
    .get("http://localhost:3333/userTasks/byUserId/" + userId)
    .then(function(response) {
      return response.data;
    });
}

// task-service.js
function getAllTasks() {
  return $http.get("http://localhost:3333/tasks").then(function(response) {
    return response.data;
  });
}

然后我在控制器中使用此数据,如下所示:

userTaskService
    .getAllUserTasksForUser($routeParams.id)
    .then(data => (vm.userTasks = data));

...并且由于有了autopopulate插件,我在User中拥有完整的TaskUserTasks对象。到目前为止,一切都很好。

现在,我需要获取所有未分配给特定Task的{​​{1}}。我想我应该先获取所有User,然后获取给定Task的所有UserTasks,然后使用一些“ where-not-in”类型的过滤器进行某种区别

我仍然是所有MEAN组件的新手,我对所有这些userId,promise和其他东西都不熟悉...我真的不确定如何执行此操作。我尝试使用多个then(),但没有成功。谁能给我一个提示?

1 个答案:

答案 0 :(得分:0)

您可以在服务器/ API端执行,这样会更加高效。

如果要这样做,请在客户端尝试

var userid = $routeParams.id;
userTaskService
    .getAllTasks()
    .then((data) => {
        vm.userTasks = data.filter(task => task.userId !== userid)
    });