如何使用nodeJS更新mongodb中的值?

Posted

技术标签:

【中文标题】如何使用nodeJS更新mongodb中的值?【英文标题】:How to update a value inside mongodb with nodeJS? 【发布时间】: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,这就是为什么它似乎在这里被更新但实际上它不是,因为它没有正确保存。你在用猫鼬吗? 【参考方案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 ),数据库中没有任何变化,我正在使用模式

以上是关于如何使用nodeJS更新mongodb中的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到field1大于field2的文档? (Nodejs/Mongoose/MongoDB)

MongoDb:如何根据每个字段的值更新多个文档中的字段值?

MongoDb:如何根据每个字段的值更新多个文档中的字段值?

如何在 Mongoose 中更新/更新文档/数据? Passport MongoDB、Express、AngularJS、Nodejs

使用nodejs更新mongodb中的相对模式

如何使用聚合管道从 mongodb 中的当前字段中减去更新?