我有一个令人头疼的问题想和你们大家分享。
这是个模型:
_id: ObjectId()
name: String,
columns: [
{
name: String,
_id: ObjectId()
tasks: [
{
title: String,
description: String,
status: String,
_id: ObjectId()
subtasks: [
{
title: String,
isCompleted: Boolean,
},
],
},
],
},
],
});
以及查询:
exports.createSubtask = (req, res) => {
if (!req.body) {
res.status(400).send({ message: "Task name can not be empty!" });
return;
}
const board = req.params.board;
const column = req.params.column;
const task = req.params.task;
Board.findOneAndUpdate(
{
_id: board,
"columns._id": column,
"columns.tasks._id": task,
},
{
$push: {
"columns.$.tasks.$.subtasks": req.body,
},
}
)
.then((data) => {
if (!data) {
res.status(404).send({
message: `Cannot update Task with id=${task}. Maybe task was not found!`,
});
} else res.send({ message: "Task was updated successfully." });
})
.catch((err) => {
res.status(500).send({
message: "Error updating Task with id=" + task,
});
});
};
我试图用 *$push * 将一个对象推入 * subtasks * 数组,但是Postman抛出了一个错误。
你知道我哪里做错了吗?谢谢你的帮助。
- 黄金分割率
但是,我能够使用以下查询成功地将对象推送到 * tasks * 数组中:
exports.createTask = (req, res) => {
if (!req.body) {
res.status(400).send({ message: "Task name can not be empty!" });
return;
}
const board = req.params.board;
const column = req.params.column;
Board.findOneAndUpdate(
{
_id: board,
"columns._id": column,
},
{
$push: {
"columns.$.tasks": req.body,
},
}
)
.then((data) => {
if (!data) {
res.status(404).send({
message: `Cannot update Column with id=${column}. Maybe column was not found!`,
});
} else res.send({ message: "Column was updated successfully." });
})
.catch((err) => {
res.status(500).send({
message: "Error updating Column with id=" + column,
});
});
};
1条答案
按热度按时间o3imoua41#
如文档中所述,无法对嵌套数组使用多个位置
$
:位置
$
运算符不能用于遍历多个数组的查询,如遍历嵌套在其他数组中的数组的查询,因为$
占位符的替换是单个值应使用位置过滤运算符
$[<identifier>]
。注意:确保传入的
task
为ObjectId类型。