node.js - 尝试推送时 Mongoose 数组为空
问题描述
我正在玩猫鼬,我得到了以下模式:
var connection = mongoose.createConnection(remoteDbUrl);
autoIncrement.initialize(connection);
var AnswerSchema = new mongoose.Schema({
author: {
type: String,
required: [true, 'Author is required']
},
description: String,
createdAt: {
type: Date,
default: Date.now
},
votes: Number
}, {timestamps: true});
module.exports = Answer = mongoose.model('Answer', AnswerSchema);
var QuestionSchema = new mongoose.Schema({
_id: Number,
author: {
type: String,
required: [true, 'Author is required']
},
headline: String,
description: String,
answers: [AnswerSchema],
createdAt: {
type: Date,
default: Date.now
}
}, {timestamps: true});
QuestionSchema.plugin(autoIncrement.plugin, 'Question');
module.exports = Question = mongoose.model('Question', QuestionSchema);
在我的数据库中,它看起来像这样:
以这种方式插入我的问题后:
const question1 = new Question({
author: 'TestAuthor',
headline: 'TestHeadline',
description: 'TestDescription',
answers: []
}
);
question1.save().then(result => {
console.log("Created");
};
);
看起来一切都很好,但是当我尝试推送到我的数组时,随着答案开始流动,我尝试像这样添加它们:
async function addAnswer(questionId, author, description) {
const question = await Question.findById(questionId);
const answer = new Answer({
author: author,
description: description
});
question.answers.push(answer);
question.save();
}
我明白了UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'answers' of null
。我错过了什么?
解决方案
无需像那样查找和推送答案。您可以在 mongodb 中使用$push直接搜索并推送您的答案。如下:
async function addAnswer(questionId, author, description) {
const answer = new Answer({
author: author,
description: description
});
const question = await Question.findOneAndUpdate(
{ _id: questionId },
{
$push: {
answers: answer // Bold Part will be your answer object
}
},
{new: true } // To get the updated results in return
).exec()
console.log('Updated question document: ',question)
}
推荐阅读
- c# - 如何使用 HttpClient 配置 json 反序列化?
- php - 为什么 WordPress 以不同于常规字符串的方式转换我的帖子标题?
- regex - 如何用python获取字符串中每个字符的位置?
- c# - 如何从 Outlook 中的内联回复或新回复窗口获取原始电子邮件?C#
- ios - 如何从 firebase 数据库中检索特定值并将其分配给 Swift 4 中的特定变量?
- c# - 插入实体框架子项的顺序
- python - 使用 Django 从大型数据库中更快地检索数据
- sparql - 在 wikidata 中按类型过滤属性值
- c++ - 为什么共享内存(在 ipc 中)不需要上下文切换?它是来自内核空间的内存映射到用户空间吗?
- php - Firebase (FCM) + Laravel | 推送通知错误 InvalidApnsCredential