gpt4 book ai didi

javascript - Mongoose 更新文档数组内的 map 元素

转载 作者:行者123 更新时间:2023-12-03 00:01:14 26 4
gpt4 key购买 nike

如标题所示,我想更新文档中数组内的映射中的值,我使用 Mongoose。这是针对 Discord 机器人的,基本上每次用户执行命令时都会将 exp 添加到 char 中,并且它可以工作,但它看起来不正确,而且我被告知它有时不起作用:

数组内的映射如下所示: click

// This gets the user document
let user = bot.userinventories.findOne({ userID: message.author.id })
// This searches the specific map I need by name
let check = await user.get('characters').filter(char => char.name === user.get('leveling'));

// This modifies the map in only 1 value
check[0].exp++;
// This removes the entire map and saves it again
await bot.userinventories.updateOne({ userID: message.author.id },
{ $pull:
{
characters: { name: check[0].name }
}
})
await bot.userinventories.updateOne({ userID: message.author.id },
{ $push:
{
characters: check[0]
}
})

正如您所看到的,看起来不正确的部分是必须在再次保存之前完全删除 map ,这也会破坏按日期排列的任何顺序。最大的问题是用户告诉我他们因此失去了 Angular 色。有时会失败的另一件事是“let check”行,即使它通过确切的名称找到了 map (因为我的代码),它也会随机失败,例如 1/20 次。

最佳答案

我发现这个有效,即使它仍然将对象移动到 map 的最后一个位置,但它看起来比我的更干净:

await bot.userinventories.updateOne(
{ userID: message.author.id, "characters.name": check[0].name },
{ $set: { "characters.$.exp" : check[0].exp } }
)

编辑:为了不将编辑的对象移动到最后一个位置,我必须创建一个新变量,或者出于某种原因不使用“characters.$.exp”变量:'

关于javascript - Mongoose 更新文档数组内的 map 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55169705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com