简单更新无法使用位置$运算符

时间:2016-03-11 21:36:54

标签: mongodb

我刚开始使用Mongo,并且遵循文档here,当我应用相同的技术时,我似乎无法更新嵌套数组中的值。

这是我的文件:

{
    "_id" : ObjectId("56d2cf8ee2b075667d4f0545"),
    "address" : {
        "building" : "522",
        "coord" : [
            -73.95171,
            40.767461
        ],
        "street" : "East   74 Street",
        "zipcode" : "10021"
    },
    "borough" : "Manhattan",
    "cuisine" : "American ",
    "grades" : [
        {
            "date" : ISODate("2014-09-02T00:00:00Z"),
            "grade" : "A",
            "score" : 12
        },
        {
            "grade" : "B",
            "score" : 16,
            "date" : ISODate("2013-12-19T00:00:00Z")
        },
        {
            "date" : ISODate("2013-05-28T00:00:00Z"),
            "grade" : "A",
            "score" : 9
        },
        {
            "date" : ISODate("2012-12-07T00:00:00Z"),
            "grade" : "A",
            "score" : 13
        },
        {
            "date" : ISODate("2012-03-29T00:00:00Z"),
            "grade" : "A",
            "score" : 11
        }
    ],
    "name" : "Glorious Food",
    "restaurant_id" : "40361521"
}

这是我的疑问:

db.restaurants.update(
  {
    _id: 'ObjectId("56d2cf8ee2b075667d4f0545")',
    'grades.date': 'ISODate("2014-09-02T00:00:00Z")'
  },
  {
    $set: { 'grades.$.score': 1 }
  }
)

我确定我一定错过了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

从objectId和日期字段中删除引号 - 请参阅以下内容:

db.restaurants.update(
  {
    _id: ObjectId("56d2cf8ee2b075667d4f0545"),
    "grades.date": ISODate("2014-09-02T00:00:00Z")
  },
  {
    $set: { 'grades.$.score': 1 }
  }
)