假设我有一个这样的文档结构:
thing: {
name: {
first: "John",
last: "Doe"
}
}
说我只想更新姓氏。我发送哪个命令来更新?
$set: {
name: {
first: "Connor"
}
}
或者
$set: {
"name.first": "Connor"
}
有区别吗?还是偏好?我更喜欢第一种,因为它类似于实际文档,但 mongodb 文档使用第二种方法。
$set
command 将获取密钥并用您传递的值覆盖其中存储的任何内容。所以在这种情况下
$set: {
name: {
first: "Connor"
}
}
具有潜在丰富结构的整个子文档name
将被简单的 {first: 'Connor'}
.
第二种情况也发生了类似的事情,只是更深了一层。在这种情况下,它是一个字符串,但它也可以是一个散列。
$set: {
"name.first": "Connor"
}
您可以通过构建适当的点名称来更新任意深度级别的字段。这是一个稍微做作的例子
db.collection.update(query, {$set: {'stats.daily.20120622.mainpage.visited': 1}});