如何使用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