mongoDB更新单个数组元素中的多个字段(来自表单)

时间:2015-04-26 02:07:36

标签: mongodb

我在这个问题上看到了很多变化,但没有针对这个具体问题。请考虑以下文档:

{
    "class" : "english101",
    "students" : [
        {
            "name" : "julie",
            "age" : 32,
            "gpa" : "3.4"
        },
        {
            "name" : "heather",
            "age" : 34,
            "gpa" : "3.8"
        }
    ]
}

我想同时更新nameage字段。这是我正在尝试的:

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行为,而是替换了整个数组项,而不仅仅是更新了提供的字段。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您使用一个对象更新它,它会覆盖所有内容。这是一种正确的方法。

 db.test.update({
      'class':'english101', 
      'students.name':'julie'
 },{
      $set: {
          'students.$.name': 'jules',
          'students.$.age' : 31
      }
 })