如何使用nodeJS更新mongodb内部的值



我正在尝试更新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 过滤数据

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))

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

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

如果您正在使用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,如果你没有使用它,我认为你最好开始使用它。

最新更新