javascript - Mongodb:如何通过我的 api 填充我的模式中引用的模式

标签 javascript mongodb typescript express schema

我想编辑我的 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
    }

});

如何编辑以下 post 方法来填充引用的 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);
        });
    }
    }
我需要帮助编辑发布方法。我一直在尝试不同的方法,但都没有奏效。

最佳答案

您当前的方法有些不对,您需要先保存域文档,保存成功后您可以创建任务文档。

试试这个:

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
}

关于javascript - Mongodb:如何通过我的 api 填充我的模式中引用的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55389726/

相关文章:

windows - MongoDB Atlas mongoimport 问题无法将数组解码为 D

javascript - 访问 token 和响应数据

javascript - Angular react 形式阵列

javascript - 根据某个前缀从字符串中获取子字符串

javascript - 在 JavaScript 中转换以 10 为基数和以 255 为基数的整数字符串?

javascript - 单击灯箱中的按钮重定向到不同页面

node.js - 如何在 NodeJS 和 Mongoose 中填充需要引用用户名的帖子

ruby ,Mongodb, Anemone : web crawler with possible memory leak?

Typescript - 基础接口(interface)和扩展接口(interface)的联合类型

javascript - 在这种情况下如何处理数据驱动的输入?