【问题标题】:Updating documents using nested JSON or dotted keys使用嵌套 JSON 或点键更新文档
【发布时间】:2012-06-22 05:00:44
【问题描述】:

假设我有一个这样的文档结构:

thing: {
  name: {
    first: "John",
    last: "Doe"
  }
}

说我只想更新姓氏。我要发送哪个命令来更新?

$set: {
  name: {
    first: "Connor"
  }
}

$set: {
  "name.first": "Connor"
}

有区别吗?还是偏好?我更喜欢第一种,因为它类似于实际文档,但 mongodb 文档使用第二种方法。

【问题讨论】:

  • 你的意思是用第一种方式写MongoDb吧? mongodb.org/display/DOCS/Updating#Updating-%24set
  • 嗯,我猜他们两者都用。有区别吗?
  • 区别在于第一个选项会删除你的姓氏,因为你将 name 设置为它后面的对象,它只包含 first。
  • 另外,我认为你的意思是“只更新名字”,上面。

标签: json mongodb


【解决方案1】:

$set 命令将获取密钥并用您传递的值覆盖其中存储的任何内容。所以在这种情况下

$set: {
  name: {
    first: "Connor"
  }
}

具有潜在丰富结构的整个子文档name 将被一个简单的{first: 'Connor'} 取代。

在第二种情况下也发生了类似的事情,只是它更深了一层。在这种情况下,它是一个字符串,但它也可以是一个哈希。

$set: {
  "name.first": "Connor"
}

您可以通过构造适当的点名称来更新任意深度级别的字段。这是一个稍微做作的例子

db.collection.update(query, {$set: {'stats.daily.20120622.mainpage.visited': 1}});

【讨论】:

    猜你喜欢
    • 2018-04-07
    • 2017-03-06
    • 2022-01-17
    • 2020-04-23
    • 2016-08-04
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多