使用嵌套的JSON或虚线键更新文档

时间:2012-06-22 05:00:44

标签: json mongodb

假设我有这样的doc结构:

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

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

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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

您可以通过构建正确的点名来更新任意深度级别的字段。这是一个有点人为的例子

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