MongoDB 更新文档

在 MongoDB 中,我们有两种方法来更新集合中的文档。1)update()方法,2)save()方法。虽然这两种方法都更新了现有文档,但它们正在不同的场景中使用。当我们需要更新现有文档的值时使用update()方法,而save()方法用于将现有文档替换为已在其中传递的文档。

要更新 MongoDB 中的文档,我们在命令中提供条件,并更新与该条件匹配的文档。要了解标准在 MongoDB 命令中的工作方式,请参阅上一个教程: MongoDB 查询文档

使用update()方法更新文档

语法:

db.collection_name.update(criteria, update_data)

示例:

例如:假设我在数据库beginnersbookdb中有一个名为got的集合。got里面的文档是:

> db.got.find().pretty()
{
        "_id" : ObjectId("59bd2e73ce524b733f14dd65"),
        "name" : "Jon Snow",
        "age" : 32
}
{
        "_id" : ObjectId("59bd2e8bce524b733f14dd66"),
        "name" : "Khal Drogo",
        "age" : 36
}
{
        "_id" : ObjectId("59bd2e9fce524b733f14dd67"),
        "name" : "Sansa Stark",
        "age" : 20
}
{
        "_id" : ObjectId("59bd2ec5ce524b733f14dd68"),
        "name" : "Lord Varys",
        "age" : 42
}

现在假设我想更新名为“Kit Harington”的 Jon Snow 的名字。对此的命令是:

db.got.update({"name":"Jon Snow"},{$set:{"name":"Kit Harington"}})

输出:

MongoDB 更新文档

如您所见,该文档已更新。

你知道吗? 默认情况下,更新方法更新单个文档。在上面的示例中,我们只有一个文档与条件匹配,但是如果有更多文档,那么也只会更新一个文档。要启用 update()方法来更新多个文档,您必须将此方法的“multi”参数设置为 true,如下所示。

使用 update()方法更新多个文档:

db.got.update({"name":"Jon Snow"},
 {$set:{"name":"Kit Harington"}},{multi:true})

使用 save()方法更新文档

语法:

db.collection_name.save( {_id:ObjectId(), new_document} )

让我们采用我们在上面看到的相同的例子。现在我们要将Kit Harington的名称更新为Jon Snow。要使用save()方法,您应该知道该文档的唯一_id字段。

一个非常重要的注意事项是当你在使用save()方法时不提供_id字段时,它调用insert()方法并插入传递的文档作为新文档进入集合

要获取文档的_id,可以键入以下命令:

db.got.find().pretty()

这里有一个集合名称。这种查找唯一_id的方法仅在您拥有少量文档时才有用,否则在大量文档中滚动和搜索该_id是很繁琐的。

如果您有大量文档,那么要获取特定文档的_id,请使用find()方法中的条件。例如:要使用save()方法获取要更新的文档的_id,请键入以下命令:

> db.got.find({"name": "Kit Harington"}).pretty()
{
        "_id" : ObjectId("59bd2e73ce524b733f14dd65"),
        "name" : "Kit Harington",
        "age" : 32
}

现在我们知道该文档的唯一_id字段。让我们使用save()方法编写命令。

> db.got.save({"_id" : ObjectId("59bd2e73ce524b733f14dd65"), "name":
 "Jon Snow", "age": 30})
>

你应该看到这个输出:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

验证更新:

MongoDB 更新文档

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址