Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ค้นหาและแทนที่ฟิลด์ชนิด NumberLong ใน MongoDB

ใช้ 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)}}
);