我在这个问题上看到了很多变化,但没有针对这个具体问题。请考虑以下文档:
{
"class" : "english101",
"students" : [
{
"name" : "julie",
"age" : 32,
"gpa" : "3.4"
},
{
"name" : "heather",
"age" : 34,
"gpa" : "3.8"
}
]
}
我想同时更新name
和age
字段。这是我正在尝试的:
db.test.update(
{
'class':'english101',
'students.name':'julie'
},
{
$set: {
'students.$': {
'name':'jules',
'age':'31'
}
}
}
)
结果如下:
{
"class" : "english101",
"students" : [
{
"name" : "jules",
"age" : "31",
# GPA IS GONE!
},
{
"name" : "heather",
"age" : 34,
"gpa" : "3.8"
}
]
}
问题在于它取代了预期的update
和$set
行为,而是替换了整个数组项,而不仅仅是更新了提供的字段。
我该怎么做?
答案 0 :(得分:1)
在您的情况下,您使用一个对象更新它,它会覆盖所有内容。这是一种正确的方法。
db.test.update({
'class':'english101',
'students.name':'julie'
},{
$set: {
'students.$.name': 'jules',
'students.$.age' : 31
}
})