创建新的猫鼬子文档并附加到现有的父文档
Creating new mongoose sub-doc and appending to existing parent doc
我正在使用 NodeJS、MongoDB、Express、Mongoose 等构建一个带有数据库的网站
- 我设置了两个模式:事件和子文档模式类别(以及其他)。
- 函数拉入数组,其中包含创建多个类别所需的数据(此位有效)以及附加到末尾的事件 ID。
- 下面的前几位只是获取该 ID,然后将其从数组中删除(可能是更好的方法,但同样有效)。
- 如上所述,类别然后正确创建(甚至进行验证),这太棒了,但是...
- 它们不会附加到事件文档中。该文档将“类别”字段更新为适用数量的“空”值,但我终究无法让它实际获取新创建类别的 ID。
我从某处获取(并调整)了以下代码,所以这就是我所在的位置...
exports.addCategories = catchAsync(async (req, res, next) => {
const categories = req.body;
const length = categories.length;
const eventID = categories[length - 1].eventId;
categories.pop();
Event.findOne({ _id: eventID }, (err, event) => {
if (err) return res.status(400).send(err);
if (!event)
return res.status(400).send(new Error("Could not find that event"));
Category.create(categories, (err, category) => {
if (err) return res.status(400).send(err);
event.categories.push(category._id);
event.save((err) => {
if (err) return res.status(400).send(err);
res.status(200).json(category);
});
});
});
});
目前 mongoose 调试输出显示如下(这证实它的大部分工作正常,但只是没有正确提取 ID):
> Mongoose: events.updateOne({ _id: ObjectId("614bc221bc067e62e0790875")}, { '$push': { categories: { '$each': [ undefined ] } }, '$inc': { __v: 1 }}, { session: undefined })
没关系!我意识到“类别”仍然是一个数组,而不是我假设的类别数组的一个元素。
所以我用这个替换了那个部分,现在......它起作用了!
Category.create(categories, (err, categories) => {
if (err) return res.status(400).send(err);
categories.forEach((category) => {
event.categories.push(category._id);
});
event.save((err) => {
if (err) return res.status(400).send(err);
});
});
我正在使用 NodeJS、MongoDB、Express、Mongoose 等构建一个带有数据库的网站
- 我设置了两个模式:事件和子文档模式类别(以及其他)。
- 函数拉入数组,其中包含创建多个类别所需的数据(此位有效)以及附加到末尾的事件 ID。
- 下面的前几位只是获取该 ID,然后将其从数组中删除(可能是更好的方法,但同样有效)。
- 如上所述,类别然后正确创建(甚至进行验证),这太棒了,但是...
- 它们不会附加到事件文档中。该文档将“类别”字段更新为适用数量的“空”值,但我终究无法让它实际获取新创建类别的 ID。
我从某处获取(并调整)了以下代码,所以这就是我所在的位置...
exports.addCategories = catchAsync(async (req, res, next) => {
const categories = req.body;
const length = categories.length;
const eventID = categories[length - 1].eventId;
categories.pop();
Event.findOne({ _id: eventID }, (err, event) => {
if (err) return res.status(400).send(err);
if (!event)
return res.status(400).send(new Error("Could not find that event"));
Category.create(categories, (err, category) => {
if (err) return res.status(400).send(err);
event.categories.push(category._id);
event.save((err) => {
if (err) return res.status(400).send(err);
res.status(200).json(category);
});
});
});
});
目前 mongoose 调试输出显示如下(这证实它的大部分工作正常,但只是没有正确提取 ID):
> Mongoose: events.updateOne({ _id: ObjectId("614bc221bc067e62e0790875")}, { '$push': { categories: { '$each': [ undefined ] } }, '$inc': { __v: 1 }}, { session: undefined })
没关系!我意识到“类别”仍然是一个数组,而不是我假设的类别数组的一个元素。
所以我用这个替换了那个部分,现在......它起作用了!
Category.create(categories, (err, categories) => {
if (err) return res.status(400).send(err);
categories.forEach((category) => {
event.categories.push(category._id);
});
event.save((err) => {
if (err) return res.status(400).send(err);
});
});