این فصل به معرفی نحوه به‌روزرسانی داده‌های سند در Golang MongoDB می‌پردازد.

توابع به‌روزرسانی پشتیبانی‌شده توسط MongoDB

  • Collection.UpdateOne - به‌روزرسانی یک قطعه داده
  • Collection.UpdateMany - به‌روزرسانی داده‌ها به صورت دسته‌ای
  • Collection.ReplaceOne - جایگزینی داده

آماده‌سازی داده‌های آزمایشی

درج یک دسته داده در مجموعه coll

docs := []interface{}{
	bson.D{
		{"item", "canvas"},
		{"qty", 100},
		{"size", bson.D{
			{"h", 28},
			{"w", 35.5},
			{"uom", "cm"},
		}},
		{"status", "A"},
	},
	// (سایر داده‌ها ادامه دارد...)
}

result, err := coll.InsertMany(context.Background(), docs)

به‌روزرسانی یک سند

result, err := coll.UpdateOne(
	context.Background(), // دریافت پارامتر context
	bson.D{ // تنظیم معیارهای پرس‌وجو برای یافتن سند با item=paper
		{"item", "paper"},
	},
	bson.D{ // تنظیم عبارت به‌روزرسانی
		{"$set", bson.D{ // استفاده از اپراتور $set برای تنظیم محتوای فیلد به‌روزرسانی‌شده
			{"size.uom", "cm"},  // تغییر مقدار size.uom به cm
			{"status", "P"}, // تغییر مقدار status به P
		}},
		{"$currentDate", bson.D{  // استفاده از اپراتور $currentDate برای به‌روزرسانی مقدار فیلد lastModified به زمان کنونی
			{"lastModified", true},
		}},
	},
)

یک سند بر اساس معیارهای پرس‌وجو مطابقت دهید، سپس محتوای این سند را به‌روزرسانی کنید.

نکته: اگر با MongoDB آشنا نیستید، لطفاً آموزش MongoDB را مطالعه کنید.

به روزرسانی اسناد به صورت گروهی

تفاوت این تابع با تابع UpdateOne این است که UpdateMany اسناد مطابق با معیارهای تطابق را به صورت گروهی به روزرسانی می‌کند.

result, err := coll.UpdateMany(
	context.Background(),
	bson.D{ // معیارهای جستجو را تعیین می‌کند، مقدار qty > 50
		{"qty", bson.D{
			{"$lt", 50},
		}},
	},
	bson.D{ // محتوای به روزرسانی را تعیین می‌کند
		{"$set", bson.D{
			{"size.uom", "cm"},
			{"status", "P"},
		}},
		{"$currentDate", bson.D{
			{"lastModified", true},
		}},
	},
)

جایگزین کردن یک اسناد

براساس معیارهای جستجو، یک سند مشخص را جستجو کرده و محتوای سند را با محتوای مشخص شده جایگزین می‌کند.

نکته: جایگزین کردن یک سند به معنای جایگزینی کلیه محتوا است و نه به روزرسانی جزئی ارزش‌های فیلد خاص در سند.

result, err := coll.ReplaceOne(
	context.Background(),
	bson.D{ // معیارهای جستجو را تعیین می‌کند، item=paper
		{"item", "paper"},
	},
	bson.D{ // محتوای سند جدید را تعیین می‌کند
		{"item", "paper"},
		{"instock", bson.A{
			bson.D{
				{"warehouse", "A"},
				{"qty", 60},
			},
			bson.D{
				{"warehouse", "B"},
				{"qty", 40},
			},
		}},
	},
)

ابتدا براساس معیارهای جستجو، سندی با item=paper را پیدا کرده و سپس آن را با محتوای سند جدید جایگزین می‌کند.