如何向现有文档添加新字段

Iho*_*nko 8 mongodb

coupes我的数据库中的集合中,一个示例记录如下所示:

db.coupes.findOne()
{
    "_id" : ObjectId("5949834be916d79e033500c6"),
    "rank" : 10,
    "brand" : "Toyota",
    "model" : "86SE"
}
Run Code Online (Sandbox Code Playgroud)

但是,我想对其进行更新,使其如下所示:

 {
"_id" : ObjectId("5949834be916d79e033500c6"),
"rank" : 10,
"brand" : "Toyota",
"model" : "86SE", 
"engineSpec" : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"}
 }
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Art*_*pov 9

因此,您应该使用 'update' 方法并传递两个对象:第一个用于查找要更新的文档,第二个用于更新数据。

如您所见,我使用 '$set' 运算符来防止对象被传递的数据完全替换。在官方文档中了解有关更新方法和$set运算符的更多信息。

db.coupes.update(
        {
            _id: ObjectId("5949834be916d79e033500c6")
        },
        {
            $set : {
                engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} }
            }
        }
    )
Run Code Online (Sandbox Code Playgroud)

我在示例中使用 ObjectId 作为唯一的 find 参数,因为它正在更新单个 uniq 文档。实际上,您可以按任何字段查找对象,但请记住,如果您有多个具有相同字段/值的对象 - 您需要向multi:true查询添加选项以更新所有合适的文档:

db.coupes.update(
            {
                rank: 10
            },
            {
                $set : {
                    engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} }
                }
            },
            {
                multi: true
            }
        )
Run Code Online (Sandbox Code Playgroud)

此类代码将更新 rank 等于 10 的所有文档。此外,您应该注意到我在第三个对象中添加了 'multi' 选项,这是您之前没有看到的。在此处阅读有关更新选项的更多信息。