我想在mongose中传递数组子文档中的数组对象



这是我的模式

我正在尝试在答案数组中添加回复数组。如果有人回答了一个问题,如果有人想回答给定的答案

const mongoose = require("mongoose");
const { ObjectId } = mongoose.Schema;
const questionSchema = new mongoose.Schema(
{
postedBy: {
type: ObjectId,
required: true,
ref: "User",
},
question: {
type: String,
required: true,
},
photo: {
data: String,
required: false,
},
answers: [
{
userId: { type: ObjectId, ref: "User" },
answerType: {
data: String,
required: false,
},
answer: String,
replies: [
{
userId: { type: ObjectId, ref: "User" },
reply: String,
replyType: {
data: String,
required: false,
},
},
],
},
],
questionType: {
data: String,
required: false,
},
createdAt: {
type: Date,
required: true,
default: Date.now,
},
},
{ timeStamps: true }
);
module.exports = mongoose.model("Question", questionSchema);

这是我的控制器方法

exports.postReply = (req, res) => {
const reply = req.body.reply || "";
const userId = req.user._id || "";
const answerId = req.body.answerId || "";
Question.findByIdAndUpdate(
{ _id: answerId },
({ $push: { answers: { answer: { replies: { reply, userId } } } } },
{ new: true }),
(err, newReply) => {
if (err) {
res.status(400).json({
error: errorHandler(err),
});
} else {
res.json({
msg: "Reply posted successfully",
newReply,
});
}
}
);
};

我觉得findOneAndUpdate方法出错了。我在控制台上没有得到任何错误,但newReply为null。任何帮助都将不胜感激。

我建议您在向数组添加文档时使用$addToSet而不是$push运算符。(请参见:https://docs.mongodb.com/manual/reference/operator/update/addToSet/)。如果要向数组中添加多个文档,请同时参考$each运算符和$addToSet。

因此,您的编码可能与此类似(注意:变量"yourDocument"是您想要添加的文档(:

Question.findByIdAndUpdate(
{ _id: answerId },
{ $addToSet: { answers: yourDocument } },
{ new: true },
(err, newReply) => {
if (err) {
res.status(400).json({
error: errorHandler(err),
});
} else {
res.json({
msg: "Reply posted successfully",
newReply,
});
}
}
);
};

问题显然是父母关系({ $push: { answers: { answer: { replies: { reply, userId } } } } }, { new: true })

执行此console.log( ({a:1}, {b:2}) );将记录{b: 2},这意味着您正在执行此

Question.findByIdAndUpdate( { _id: answerId }, { new: true }, (err, newReply) => {

所以去除亲子关系,你应该是个好

Question.findByIdAndUpdate(
{ _id: answerId },
{ $push: { answers: { answer: { replies: { reply, userId } } } } },
{ new: true },
(err, newReply) => {
if (err) {
res.status(400).json({
error: errorHandler(err),
});
} else {
res.json({
msg: "Reply posted successfully",
newReply,
});
}
}
);

最新更新