假设我有这样的doc结构:
thing: {
name: {
first: "John",
last: "Doe"
}
}
说我只想更新姓氏。我要发送哪个命令进行更新?
$set: {
name: {
first: "Connor"
}
}
或
$set: {
"name.first": "Connor"
}
有区别吗?还是偏好?我更喜欢第一个,因为它类似于实际文档,但mongodb文档使用第二种方法。
答案 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}});