我在这个问题上看到了很多变体,但是在这个特定问题上却没有。考虑以下文档:
{
"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
行为,它取代,而不是仅仅更新提供的字段中的整个阵列的项目。
我应该怎么做?
在您的情况下,您将使用一个对象进行更新,该对象将覆盖所有内容。这是一种正确的方法。
db.test.update({
'class':'english101',
'students.name':'julie'
},{
$set: {
'students.$.name': 'jules',
'students.$.age' : 31
}
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句