我如何从父模型查询猫鼬中其他模型的数组?

时间:2019-01-05 06:27:45

标签: javascript node.js database mongodb mongoose

我有两个用于用户和待办事项的架构。每个待办事项都有一个所有者作为用户,每个用户都有一个待办事项数组。

// 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中得到它。

1 个答案:

答案 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');    
                                                })
         )

这将以相同名称的数组返回该用户的所有待办事项。