繁体   English   中英

如何通过 mongoose 中的 id 部分更改数组中 object 中的字段?

[英]How to change fields in object in array by id in mongoose partially?

如何通过 mongoose 中的 id 更改数组中 object 中的部分字段? 我需要在一张 object '卡片'中更改问题和答案。 我怎样才能做到这一点?

我奇怪的尝试:

const game = await Game.findOneAndUpdate({ _id: cardId, cards._id: itemQuestionId }, { $set: { 
        cards.$.question: questionEdit, 
        cards.$.answer: answerEdit
    }
}).lean()

文件结构 -

{
    "theme": "Игра престолов",
    "cards": [{
        "_id": {
            "$oid": "60ae1e78956ee2a72057c87f"
        },
        "question": "Мастера монет Лорда Петра Баелиша также знали под каким именем?",
        "answer": "Мизинец",
        "points": 100
    }, {
        "_id": {
            "$oid": "60ae1e78956ee2a72057c880"
        },
        "question": "Что изображено на гербе Ланнистеров?",
        "answer": "Лев",
        "points": 200
    }, {
        "_id": {
            "$oid": "60ae1e78956ee2a72057c881"
        },
        "question": "Как зовут Лютоволка Джона Сноу?",
        "answer": "Призрак",
        "points": 300
    }, {
        "_id": {
            "$oid": "60ae1e78956ee2a72057c882"
        },
        "question": "Кто был ответственным за создание Ночного Короля?",
        "answer": "дети леса",
        "points": 400
    }, {
        "_id": {
            "$oid": "60ae1e78956ee2a72057c883"
        },
        "question": "Чёрно-белый дом служит ещё и храмом. А кому там поклоняются?",
        "answer": "Многоликому",
        "points": 500
    }],
    "__v": 0
}

在互联网上,我找到了仅适用于 MongoDB 的解决方案,我需要 ZCCADCDEDB567ABAE643E15DCF0974E503Z

我做的

app.patch("/api/v1/games/", async (req, res, next) => {
  const {questionEdit, answerEdit, itemQuestionId, cardId} = req.body;

const game = await Game.findOneAndUpdate(
  {_id: cardId},
  {$set: {"cards.$[el].question": questionEdit } },
  { 
    arrayFilters: [{ "el._id":  itemQuestionId}],
    new: true
  }
)
.........................rest code
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM