在我数据库的 coupes
集合中,示例记录如下所示:
db.coupes.findOne()
{
"_id" : ObjectId("5949834be916d79e033500c6"),
"rank" : 10,
"brand" : "Toyota",
"model" : "86SE"
}
但是,我想将其更新为如下所示:
{
"_id" : ObjectId("5949834be916d79e033500c6"),
"rank" : 10,
"brand" : "Toyota",
"model" : "86SE",
"engineSpec" : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"}
}
我怎样才能做到这一点?
因此,您应该使用“更新”方法并向其传递两个对象:第一个用于查找您要更新的文档,第二个用于更新数据。
如您所见,我正在使用“$set”运算符来防止对象被传递的数据完全替换。
了解有关 update 的更多信息方法和$set官方运营商docs .
db.coupes.update(
{
_id: ObjectId("5949834be916d79e033500c6")
},
{
$set : {
engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} }
}
}
)
我在示例中使用 ObjectId 作为唯一的查找参数,因为它正在更新单个 uniq 文档。实际上,您可以按任何字段查找对象,但请记住,如果您有多个具有相同字段/值的对象 - 您需要在查询中添加 multi:true
选项以更新所有合适的文档:
db.coupes.update(
{
rank: 10
},
{
$set : {
engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} }
}
},
{
multi: true
}
)
这样的代码将更新排名等于 10 的所有文档。您还应该注意到我在第三个对象中添加了“多”选项,这是您之前没有看到的。阅读有关更新选项的更多信息 here .