【问题标题】:Mongoose findOneAndUpdate() only updates if document already exists, doesn't create new doc if not?Mongoose findOneAndUpdate() 仅在文档​​已存在时更新,如果不存在则不创建新文档?
【发布时间】:2021-09-12 06:45:49
【问题描述】:

我的 javascript 机器人遇到了问题,如果该服务器还没有自定义前缀,则不会保存我的自定义前缀,如果有,它会正确更新。

await mongo().then(async (mongoose) => {
                try {
                    let newprefix = content.replace(`${prefix}setprefix `, '')
                    await prefixSchema.findOneAndUpdate({_id: guild.id}, {_id: guild.id, prefix: newprefix})
                        .then(async () => {
                            console.log(`updated prefix for guild: ${guild.id}`)
                            await channel.send(`Succesfully updated prefix for this server to '${newprefix}'`)
                            message.guild.me.setNickname(`[${newprefix}] - Helix`)
                        })
                        .catch(async (err) => {
                            console.error(`failed to update prefix for guild: ${guild.id}\n${err}`)
                            await channel.send(`Failed to update prefix.`)
                        })
                    console.log("saved to db")

                } catch {
                    console.log("Something went wrong while saving new prefix for a server.")
                } finally {
                    mongoose.connection.close()
                }

机器人确实会打印并发送它已成功更新前缀,但如果还没有 guild.id 的文档,则不会保存任何内容。我做错了什么,我该如何解决?

感谢阅读!

【问题讨论】:

    标签: mongodb mongoose discord discord.js


    【解决方案1】:

    Model.updateOne()

    参数

    [options.upsert=false]«Boolean» 如果为真,并且没有找到文档,则插入一个新文档

    MongoDB 将只更新与过滤器匹配的第一个文档,而不管 multi 选项的值如何。 如果您想覆盖整个文档而不是使用像 $set 这样的原子操作符,请使用 replaceOne()。 示例:

    const res = await Person.updateOne({ name: 'Jean-Luc Picard' }, { ship: 'USS Enterprise' });
    res.n; // Number of documents matched
    res.nModified; // Number of documents modified
    

    请访问https://mongoosejs.com/docs/api.html#model_Model.updateOne了解更多信息。

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 2019-08-04
      • 2018-09-13
      • 2017-03-13
      • 2016-08-01
      • 2016-01-23
      • 1970-01-01
      • 2021-03-10
      • 2021-04-24
      相关资源
      最近更新 更多