node.js - 如何在猫鼬中更新和删除数组中的项目?
问题描述
我有一个板对象,我想从 express 和 mongoose 中编辑它,这是我的对象:
"boardMembers": [
"5f636a5c0d6fa84be48cc19d",
],
"boardLists": [
{
"cards": [
{
"_id": "5f7c9b77eb751310a41319ab",
"text": "card one"
},
{
"_id": "5f7c9bb524dd8d42d469bba3",
"text": "card two"
}
],
"_id": "5f7c9b6b02c19f21a493cb7d",
"title": "list one",
"__v": 0
}
],
"_id": "5f63877177beba2e3c15d159",
"boardName": "board1",
"boardPassword": "123456",
"boardCreator": "5f636a5c0d6fa84be48cc19d",
"g_createdAt": "2020-09-17T15:57:37.616Z",
"__v": 46
}
现在这是我的代码,我试着用 $pull 来做,但是当我在 Postman 上检查它时什么也没发生
router.put("/delete-task/:list/:task", auth, boardAuth, async (req, res) => {
const listId = req.params.list;
const task = req.params.task;
const board = await Board.findOne({ _id: req.board._id });
if (!board) return res.status(404).send("no such board");
Board.findOneAndUpdate(
{ _id: req.board._id },
{ $pull: { "boardLists.$[outer].cards": { _id: task } } },
{
arrayFilters: [{ "outer._id": listId }],
}
);
await board.save();
res.send(board);
});
我在这里想念什么?
解决方案
希望这适用于您的情况,您只需要将您的 id 转换为 mongo objectId。所以你的代码看起来像这样:
import mongoose from "mongoose";
const task = mongoose.Types.ObjectId(req.params.task);
const listId = mongoose.Types.ObjectId(req.params.list);
board = await Board.findOneAndUpdate(
{ _id: req.board._id},
{ $pull: {
"boardLists.$[outer].cards": { _id: task }
}
},
{
arrayFilters: [{ "outer._id": listId }],
returnNewDocument: true
}
);
res.send(board);
推荐阅读
- html - 如何在单选按钮之间添加空格?(HTML)
- swift - 你如何阻止视图阴影到达它一侧的另一个视图控制器?
- javascript - .then() 优先于 Promise 之外的代码?
- android - “/system/bin/sh: 语法错误:'(' 意外”在 ADB 中指定文件时
- reactjs - 如何在反应中添加选项到反应完美滚动条
- javascript - 如何使用 JavaScript 粘贴到 Selenium WebDriver?
- python - 无法执行“打印”语句
- r - 使用 R 和 IBrokers,调用给定股票代码的买价和卖价的函数是什么?
- x86 - 在保护模式下不允许推送 imm16 吗?
- javascript - 使用 discord.js 中的关键字搜索 JSON?