【问题标题】:How to update a value inside mongodb with nodeJS?如何使用nodeJS更新mongodb中的值?
【发布时间】:2021-04-09 02:19:59
【问题描述】:

我正在尝试更新 mogoodb 数组中的值,但这是问题所在 数据库?

    "TempChannels": [{
        "user": "299481590445113345",
        "channel": "794869948878159884",
        "settings": []
    }, {
        "user": "583363766750806043",
        "channel": "795004103998308352",
        "settings": []
    }],

应该更新用户的代码部分:

Data.TempChannels[0].user = Target.id
Data.save().catch(er => console.log(er))

另外,运行代码时没有出现错误。当我控制数据时,它返回一个已更新但实际上并未保存在 mongodb 中的用户! 代码

Data.save().then(() => console.log(Data.TempChannels[0].user))

这是全部数据

{
    "_id": {
        "$oid": "5ff0cd1ee3d9fd2d40d82d23"
    },
    "TempChannels": [{
        "user": "299481590445113345",
        "channel": "795014692522295326",
        "settings": []
    }, {
        "user": "583363766750806043",
        "channel": "795015273060892753",
        "settings": []
    }],
    "Guild": "704158258201624657",
    "Stats": "true",
    "ChannelID": "795014681664290826",
    "ParentID": "795014680556994610",
    "LogChannelID": "795014683601010709",
    "TempControlChannelID": "795014682518749274",
    "DefaultSettings": {
        "limit": null,
        "name": null,
        "bitrate": null,
        "copyperms": null
    },
    "__v": 2
}

我正在按 Guild 过滤数据

【问题讨论】:

  • 我认为它在这个 console.log Data.save().then(() => console.log(Data.TempChannels[0].user)) 中发生了变化,因为您正在记录数据您刚刚在变量“Data”中更新了它,但它没有保存到 mongoose,这就是为什么它似乎在这里被更新但实际上它不是,因为它没有正确保存。你在用猫鼬吗?

标签: node.js arrays mongodb discord.js


【解决方案1】:
if you are using mongoose to connect MongoDB, the 
Use markModified("updated field name")

Data.TempChannels[0].user = Target.id
Data.markModified('TempChannels');
Data.save().catch(er => console.log(er))

【讨论】:

  • 不工作,我得到了这个错误``` MongoError: Cannot create field 'user' in element {TempChannels: [ { user: "299481590445113345", channel: "795014692522295326", settings: [] } ]} ```
  • 你可以试试 Data.markModified('TempChannels') 吗??
  • 享受..!!快乐编码。
【解决方案2】:

如果你使用猫鼬,有一种方法可以更新现有数据的内容

const res = await Person.replaceOne({ _id: 24601 }, { name: 'Jean Valjean' });
res.n; // Number of documents matched
res.nModified; // Number of documents modified

【讨论】:

  • 你能解释一下你的代码吗?什么是人,你能再看一下我的问题吗,我更新了一些东西
【解决方案3】:

如果您使用的是 Mongoose,您可以通过执行类似的操作来更新记录:

SchemaName.update({Guild: 'Guild Value Here'}, {$set: { "TempChannels[0].user" : "%newvalue%"}})
.then((data) => {
    console.log(data)
})
.catch(err => {
    console.log.error(err);
    
});

如果你正在使用 mongoose,你应该将 schemaName 替换为你的架构名称,如果你不使用它,我认为你最好开始使用它。

【讨论】:

  • 这是日志({ ok: 0, n: 0, nModified: 0 }),数据库中没有任何变化,我正在使用模式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2021-11-12
  • 1970-01-01
相关资源
最近更新 更多