编辑:由于找不到正确的解决方案,因此我更改了 应用程序的结构有点,并发布了另一个问题: Mongoose - find documents not in a list
我有一个MEAN应用,具有三个模型:User
,Task
,并且为了跟踪哪个任务分配给我拥有的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
中拥有完整的Task
和UserTasks
对象。到目前为止,一切都很好。
现在,我需要获取所有未未分配给特定Task
的{{1}}。我想我应该先获取所有User
,然后获取给定Task
的所有UserTasks
,然后使用一些“ where-not-in”类型的过滤器进行某种区别
我仍然是所有MEAN组件的新手,我对所有这些userId
,promise和其他东西都不熟悉...我真的不确定如何执行此操作。我尝试使用多个then()
,但没有成功。谁能给我一个提示?
答案 0 :(得分:0)
您可以在服务器/ API端执行,这样会更加高效。
如果要这样做,请在客户端尝试
var userid = $routeParams.id;
userTaskService
.getAllTasks()
.then((data) => {
vm.userTasks = data.filter(task => task.userId !== userid)
});