English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDBドキュメントの更新

MongoDB update()および save()メソッドは、ドキュメントをコレクションに更新するために使用されます。update()メソッドは既存のドキュメントの値を更新し、save()メソッドはsave()メソッドに渡されたドキュメントで既存のドキュメントを置き換えます。

MongoDB Update()メソッド

update()メソッドは、既存のドキュメントの値を更新します。

文法

update()方法的基本语法如下-

>db.COLLECTION_NAME.update(SELECTION_CRITERIA,	UPDATED_DATA)

mycolコレクションが以下のデータを持っていると仮定します。

{	"_id":	ObjectId(	)5983548781331adf45ec5),	"title":"MongoDB 紹介"}
{	"_id":	ObjectId(	)5983548781331adf45ec6),	"title":"NoSQL 紹介"}
{	"_id":	ObjectId(	)5983548781331adf45ec7{"title":"新しいチュートリアルの紹介"}

以下の例では、タイトルが「MongoDB Overview」のドキュメントを新しいタイトル「New MongoDB Tutorial」に設定します。

>db.mycol.update(	{"title":"MongoDB 概要"},	{$set:	{"title":"新しいMongoDBチュートリアル"}}	)
WriteResult(	{"nMatched"	: 1,	"nUpserted"	: 0,	"nModified"	: 1 )
>db.mycol.find()
{	"_id":	ObjectId(	)5983548781331adf45ec5),	"title":"新しいMongoDBチュートリアル"}
{	"_id":	ObjectId(	)5983548781331adf45ec6),	"title":"NoSQL 紹介"}
{	"_id":	ObjectId(	)5983548781331adf45ec7{"title":"新しいチュートリアルの紹介"}
>

デフォルトでは、MongoDBは1つのドキュメントのみを更新します。複数のドキュメントを更新するには、パラメータ「multi」をtrueに設定する必要があります。}

>db.mycol.update({'title':'MongoDB 概要'},
   {$set:{'title':'新しいMongoDBチュートリアル'},{multi:true})}

MongoDB Save()メソッド

save()方法はsave()メソッドに渡された新しいドキュメントで既存のドキュメントを置き換えます。

文法

MongoDB save()方法の基本的な文法は以下の通りです-

>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})

以下の例では_id '5983548781331adf45ec5'ドキュメントを置き換える。

>db.mycol.save(
   {
      "_id" : ObjectId("507f191e810c19729de860ea"), 
		"title":"新しいチュートリアルのトピック",
      "by":"基本教程"
   }
)
WriteResult({
	"nMatched" : 0,
	"nUpserted" : 1,
	"nModified" : 0,
	"_id" : ObjectId("507f191e810c19729de860ea")
)
>db.mycol.find()
{"_id" : ObjectId("507f191e810c19729de860e6), "title":"新しいチュートリアルの概要",
   "by":"Tutorials Point"
{"_id" : ObjectId("507f191e810c19729de860e6), "title":"NoSQL 概要"
{"_id" : ObjectId("507f191e810c19729de860e6), "title":"新しいチュートリアルのトピック"
>

MongoDB findOneAndUpdate()方法

findOneAndUpdate()方法更新现有文档中的值。

文法

findOneAndUpdate()方法的基本语法如下-

>db.COLLECTION_NAME.findOneAndUpdate(SELECTIOIN_CRITERIA, UPDATED_DATA)

假设我们创建了一个名为empDetails的集合,并在其中插入了三个文档,如下所示-

> db.empDetails.insertMany(
	[
		{
			First_Name: "Radhika",
			Last_Name: "Sharma",
			Age: "26",
			e_mail: "[email protected]",
			phone: "9000012345"
		},
		{
			First_Name: "Rachel",
			Last_Name: "Christopher",
			Age: "27",
			e_mail: "[email protected]",
			phone: "9000054321"
		},
		{
			First_Name: "Fathima",
			Last_Name: "Sheik",
			Age: "24",
			e_mail: "[email protected]",
			phone: "9000054321"
		}
	]
)

以下の例では、名前が「Radhika」のドキュメントの年齢とメール値を更新します。

> db.empDetails.findOneAndUpdate(
	{First_Name: 'Radhika'},
	{ $set: { Age: '30',e_mail: '[email protected]'}}
)
{
	"_id" : ObjectId("5dd6636870fb13eec3963bf5"),
	"First_Name" : "Radhika",
	"Last_Name" : "Sharma",
	"Age" : "30",
	"e_mail" : "[email protected]",
	"phone" : "9000012345"
}

MongoDB updateOne()メソッド

このメソッドは、指定されたフィルタに一致する単一のドキュメントを更新します。

文法

updateOne()メソッドの基本的な文法は以下の通りです:

>db.COLLECTION_NAME.updateOne(<filter>, <update>)

> db.empDetails.updateOne(
	{First_Name: 'Radhika'},
	{ $set: { Age: '30',e_mail: '[email protected]'}}
)
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 }
>

MongoDB updateMany()メソッド

updateMany()メソッドは、指定されたフィルタに一致するすべてのドキュメントを更新します。

文法

updateMany()メソッドの基本的な文法は以下の通りです:

>db.COLLECTION_NAME.update(<filter>, <update>)

> db.empDetails.updateMany(
	{Age:{ $gt: "25" }},
	{ $set: { Age: '00'}}
)
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

もし以下のように表示されたfindメソッドを使用してドキュメントの内容を検索すると、更新された値が表示されます-

> db.empDetails.find()
{"_id" : ObjectId("5dd6636870fb13eec3963bf5"), "First_Name" : "Radhika", "Last_Name" : "Sharma", "Age" : "00", "e_mail" : "[email protected]", "phone" : "9000012345" }
{"_id" : ObjectId("5dd6636870fb13eec3963bf6"), "First_Name" : "Rachel", "Last_Name" : "Christopher", "Age" : "00", "e_mail" : "Rachel_Christopher."}[email protected]", "phone" : "9000054321" }
{"_id" : ObjectId("5dd6636870fb13eec3963bf7"), "First_Name" : "Fathima", "Last_Name" : "Sheik", "Age" : "24", "e_mail" : "[email protected]", "phone" : "9000054321" }
>