【问题标题】:Simple update not working using positional $ operator使用位置 $ 运算符的简单更新不起作用
【发布时间】:2016-03-12 06:01:54
【问题描述】:

我刚开始使用 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 }
  }
)

我确定我一定漏掉了一些明显的东西。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    从 objectId 和 date 字段中删除引号 - 请参见下文:

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

    【讨论】:

    • Doh。非常感谢:)
    猜你喜欢
    • 2021-09-18
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2021-07-26
    • 2018-06-03
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多