ใช้ Operator $set ร่วมกับ update() เพื่อค้นหาและแทนที่ค่าของฟิลด์ที่เป็นชนิด NumberLong (64-bit Integer) ใน MongoDB
สร้างคอลเลกชันและข้อมูลตัวอย่าง (มีฟิลด์ UserId เป็น NumberLong)
> db.findAndReplaceDemo.insertOne({"UserId": NumberLong(101)});
{ "acknowledged": true, "insertedId": ObjectId("5cd2c960b64f4b851c3a13b6") }
> db.findAndReplaceDemo.insertOne({"UserId": NumberLong(110)});
{ "acknowledged": true, "insertedId": ObjectId("5cd2c966b64f4b851c3a13b7") }
> db.findAndReplaceDemo.insertOne({"UserId": NumberLong(101)});
{ "acknowledged": true, "insertedId": ObjectId("5cd2c969b64f4b851c3a13b8") }
> db.findAndReplaceDemo.insertOne({"UserId": NumberLong(120)});
{ "acknowledged": true, "insertedId": ObjectId("5cd2c96cb64f4b851c3a13b9") }
> db.findAndReplaceDemo.insertOne({"UserId": NumberLong(130)});
{ "acknowledged": true, "insertedId": ObjectId("5cd2c96eb64f4b851c3a13ba") }
แสดงข้อมูลทั้งหมด
> db.findAndReplaceDemo.find().pretty();
ผลลัพธ์:
{"_id": ObjectId("5cd2c960b64f4b851c3a13b6"), "UserId": NumberLong(101)}
{"_id": ObjectId("5cd2c966b64f4b851c3a13b7"), "UserId": NumberLong(110)}
{"_id": ObjectId("5cd2c969b64f4b851c3a13b8"), "UserId": NumberLong(101)}
{"_id": ObjectId("5cd2c96cb64f4b851c3a13b9"), "UserId": NumberLong(120)}
{"_id": ObjectId("5cd2c96eb64f4b851c3a13ba"), "UserId": NumberLong(130)}
คำสั่ง: ค้นหา UserId = 101 (NumberLong) และแทนที่ด้วย 10001
> db.findAndReplaceDemo.update(
{"UserId": NumberLong(101)},
{$set: {"UserId": NumberLong(10001)}},
false, // upsert
true // multi: อัปเดตทุกเอกสารที่ตรง
);
WriteResult({ "nMatched": 2, "nUpserted": 0, "nModified": 2 })
ตรวจสอบผลลัพธ์
> db.findAndReplaceDemo.find().pretty();
ผลลัพธ์: UserId 101 ทั้ง 2 รายการ กลายเป็น 10001 แล้ว
{"_id": ObjectId("5cd2c960b64f4b851c3a13b6"), "UserId": NumberLong(10001)}
{"_id": ObjectId("5cd2c966b64f4b851c3a13b7"), "UserId": NumberLong(110)}
{"_id": ObjectId("5cd2c969b64f4b851c3a13b8"), "UserId": NumberLong(10001)}
{"_id": ObjectId("5cd2c96cb64f4b851c3a13b9"), "UserId": NumberLong(120)}
{"_id": ObjectId("5cd2c96eb64f4b851c3a13ba"), "UserId": NumberLong(130)}
รายละเอียด NumberLong
NumberLongเป็น BSON Type สำหรับ 64-bit Signed Integer (ช่วง: -2^63 ถึง 2^63-1)- ใน MongoDB Shell ตัวเลขใหญ่จะถูกแปลงเป็น NumberLong อัตโนมัติ
- Query ต้องใช้
NumberLong(value)เพื่อให้ Type ตรงกัน (Type-sensitive) - หาก Query ด้วยตัวเลขธรรมดา
101จะไม่จับคู่กับNumberLong(101)
รูปแบบใหม่ (MongoDB 3.2+)
// updateMany สำหรับ multi: true
db.findAndReplaceDemo.updateMany(
{"UserId": NumberLong(101)},
{$set: {"UserId": NumberLong(10001)}}
);