0

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

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

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

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

或者

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

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

4

1 回答 1

6

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

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

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

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

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

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

db.collection.update(query, {$set: {'stats.daily.20120622.mainpage.visited': 1}});
于 2012-06-22T05:43:01.460 回答