提问人:Vishal 提问时间:11/15/2023 更新时间:11/16/2023 访问量:51
在mongodb中使用$set时获得不良结果
Getting undesired result while using $set in mongodb
问:
我在mongodb的集合中存储了一个对象
{
"students" : {
"[email protected]" : {"gender" : "M", "marks" : 30},
"[email protected]" : {"gender" : "M", "marks" : 40}
}
}
我正在尝试使用以下代码片段更新ID为“[email protected]”的学生的分数:
db.getCollection('school').updateOne(
{
$set:{
"[email protected]": {
"gender":"M",
"marks": 40
}
}
}
)
但是,它不是更新现有记录,而是创建一个新对象,如下所示:
{
"students" : {
"[email protected]" : {"gender" : "M", "marks" : 30},
"[email protected]" : {"gender" : "M", "marks" : 40},
"xyz@gmail" : {"com" : {"gender" : "M", "marks" : 40}}
}
}
因此,发生这种情况是因为 .在电子邮件 ID 中。mongodb有没有办法处理这个问题? 感谢任何帮助,提前致谢!
答:
2赞
jQueeny
11/16/2023
#1
我把它放在一个答案中,因为它并不完全适合评论。
我鼓励您阅读本文。
如果您继续在密钥中使用点,那么您将发现很难进行更新,并且会在您的应用程序中遇到很多问题。
如果可以的话,我的建议是将结构更改为如下所示:
{
students : [
{email: "[email protected]", gender: "M", marks: 30},
{email: "[email protected]", gender: "M", marks: 40}
]
}
这将允许您执行以下操作:
db.getCollection('school').updateOne({students: {$elemMatch: {email:'[email protected]'}}},
{
$set: {
"students.$": {
"email": "[email protected]",
"gender":"M",
"marks": 100
}
}
}
);
上一个:如何在$map中获取当前索引?
下一个:嵌套级别的 MongoDB 聚合
评论