Mongodb: как заполнить схему, указанную в моей схеме через мой API - PullRequest
1 голос
/ 28 марта 2019

Я хочу отредактировать свой API, чтобы иметь возможность заполнять ссылочную схему. вот моя схема:

export const taskSchema = new Schema ({
    user:{
        type: String,
        required: true
    },
    project: { 
        type: String,
        required: true
    },
    issue: {
        type: String,
        required: true
    },
    title: {
        type: String,
        required: true
    },
    records : [{
   
        _domain: {
            type: Schema.Types.ObjectId,
            ref: 'TaskDomains'
        },
        time: {
            type:Number
        }
    
    }],
    
   
    dateCreated: {
     
        type: Date,
        default: Date.now
    }
});

моя задачаДополнительная схема:

export const TaskDomains = new Schema ({
    label:{
        type: String,
        required: true
    }

});

как я могу отредактировать следующий метод записи, чтобы заполнить ссылочную схему TaskDomain. вот мой метод:

import * as mongoose from 'mongoose';
import {taskSchema,TaskDomains} from '../models/tasks.model';
import {Request, Response} from 'express';

const Task = mongoose.model('Task', taskSchema);
const domain = mongoose.model('domain', TaskDomains);
export class taskController{
public addNewTask (req: Request, res:Response){
        let newTask = new Task();
        newTask.user = req.body.user;
        newTask.project = req.body.project;
        newTask.issue = req.body.issue;
        newTask.title = req.body.title;
        newTask.dateCreated = req.body.dateCreated;
        newTask.records = new domain(req.body._domain);
        newTask.records = new domain(req.body._domain.label);
        newTask.records = req.body.time;

        newTask.save((err, task)=>{
            if(err){
                res.send(err);
            }
            res.json(task);
        });
    }
    }
Мне нужна помощь в редактировании метода записи. Я пробовал разные способы, но ни один не помог.

1 Ответ

1 голос
/ 28 марта 2019

Ваше текущее приложение несколько не в порядке, вам нужно сначала сохранить документ домена, и при успешном сохранении вы можете создать документ задачи.

Попробуйте:

public addNewTask (req: Request, res:Response){

    // create the domain document first, before creating the task document, and then store its _id in the task document
    let _domain = new domain(req.body._domain);
    _domain.save((err,_domain)=>{
        let newTask = new Task();
        newTask.user = req.body.user;
        newTask.project = req.body.project;
        newTask.issue = req.body.issue;
        newTask.title = req.body.title;
        newTask.dateCreated = req.body.dateCreated;

        // here you only need to store the _id of the newly created _domain document
        newTask.records = [{
            _domain : _domain._id,
            time : req.body.time
        }]

        newTask.save((err, task)=>{
            if(err){
                res.send(err);
            }
            //if you want populated _domain object in your records array, you can use .populate()
            Task.populate(task,{path : records._domain},(err,task) =>                                 
            {
               res.json(task);
            })
        });
    })
}

Я предполагаюВаше тело запроса выглядит так:

{
    user : "user_name",
    project : "project_name",
    issue : "issue_name",
    title : "title_",
    dateCreated : "date",
    _domain : {
        label : "some_label"
    },
    time : 12345
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...