我正在尝试将子文档(ApplicationSchema)推送到我的Job模式中。但它似乎没有用。
以下是我的工作架构:
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
var ApplicationSchema = require('./Application');
const Job = new Schema({
skills : {
type : Array
},
active : {
type : Boolean,
default : false
},
applications: [ApplicationSchema],
userId : {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
},{timestamps : true});
export default mongoose.model("Job", Job)
这是子文档(ApplicationSchema)。我在这个架构中还有5个子文档。 我正在用一对键值对的talentId及其值推送一个对象。但它不起作用。 我在数组中得到一个新对象,但是我想要推送的对象没有被推送。
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
var notesSchema = require('./notesSchema');
var documentSchema = require('./documentSchema');
var assessmentSchema = require('./assessmentSchema');
var interviewScheduleSchema = require('./interviewScheduleSchema');
var referenceSchema = require('./referenceSchema')
const ApplicationSchema = new Schema({
talentId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Talent'
},
applicationType: {
type: Number
}
notes: [notesSchema],
documents: [documentSchema],
assessment: [assessmentSchema],
interviewSchedule: [interviewScheduleSchema],
references: [referenceSchema]
},{
timestamps: true
});
export default ApplicationSchema;
以下是我在API端点中的代码
.post((req, res, next) => {
Job.findById(req.params.jobId)
.then((job) => {
if (job != null) {
job.applications.push(req.body);
job.save()
.then((job) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(job);
})
}
else {
err = new Error('Job ' + req.params.jobId + 'not found')
err.status = 404;
return next(err);
}
}, (err) => next(err))
.catch((err) => next(err));
})
req.body包含以下对象
{ talentId: '5a813e1eb936ab308c4cae51' }
答案 0 :(得分:0)
如果您已拥有作业文档的ID,则可以通过执行以下操作直接推送应用程序对象:
Job.update(
{ _id: req.params.jobId },
{ $push: { applications: req.body} },
callback
);
或者您可以使用promise来处理此问题。如果您只保存应用程序的ID,那么您可能希望更改您的作业架构以存储应用程序的ID而不是整个应用程序架构。
请仔细阅读documentation,因为这是非常基本的更新查询。
答案 1 :(得分:0)
你有,
talentId: {type: mongoose.Schema.Types.ObjectId,
ref: 'Talent'}
但您的req.body
包含:
{ talentId: '5a813e1eb936ab308c4cae51' }
应该是:
{ talentId: mongoose.Types.ObjectId('5a813e1eb936ab308c4cae51') }
答案 2 :(得分:0)
事实证明代码没有任何问题。
我使用的是导入和导出默认语法,但这似乎不适合。
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
和
export default ApplicationSchema;
我用Common JS语法替换它们,一切正常。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
和
module.exports = ApplicationSchema;
我为Job文档文件和每个子文档文件以及代码都工作了。