我有两个用于用户和待办事项的架构。每个待办事项都有一个所有者作为用户,每个用户都有一个待办事项数组。
// user.js
const TodoSchema = require('./todo').TodoSchema;
var UserSchema = mongoose.Schema({
name: {
type: String,
required: true
},
todos: {
type: [TodoSchema]
}
});
module.exports.UserSchema = UserSchema;
module.exports.UserModel = mongoose.model('UserModel', UserSchema);
// todo.js
var TodoSchema = mongoose.Schema({
body: {
type: String, required: true
},
owner: {
type: mongoose.Schema.Types.ObjectId,
ref: 'UserModel',
required: true
}
});
module.exports.TodoSchema = TodoSchema;
module.exports.TodoModel = mongoose.model('TodoModel', TodoSchema);
我这样输入数据。
var nUser = new UserModel({
name: "Alex
)};
nUser.save().then(user => {
var t = new TodoModel({
body: "my new todo",
owner: user._id
});
t.save().then();
});
但是问题是我想从特定用户那里获得所有待办事项,像这样...正确的方法是什么?
UserModel.findOne({name: "Alex"})
.then(user => {
// user.todos
});
P.S。 我可以像TodoModel.find({owner:specific_user._id})这样来做,但是我希望从UserModel中得到它。
答案 0 :(得分:0)
由于您正在寻求正确的执行方式,因此我将从您的用户架构开始。如果要查找用户的所有待办事项,则不需要将待办事项文档放在用户文档的数组中。因此,您应该将其从架构中删除。
之后,您可以使用简单的汇总来获得所需的结果。
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
import { Observable, throwError } from 'rxjs';
.get(<URL>).pipe
(
catchError((error: HttpErrorResponse) =>{
return throwError(error.message || 'server error');
})
)
这将以相同名称的数组返回该用户的所有待办事项。