ใช้ JavaScript ใน find() เพื่อ Cast
MongoDB สามารถใช้ JavaScript expression ใน find() เพื่อแปลงชนิดข้อมูลระหว่างคิวรี่ (เช่น String -> Number)
ตัวอย่าง
สร้างคอลเลกชัน castingDemo ฟิลด์ Amount เก็บเป็น String:
> db.castingDemo.insertOne({"Amount":"200"});
> db.castingDemo.insertOne({"Amount":"100"});
> db.castingDemo.insertOne({"Amount":"110"});
> db.castingDemo.insertOne({"Amount":"95"});
> db.castingDemo.insertOne({"Amount":"85"});
> db.castingDemo.insertOne({"Amount":"75"});
ค้นหา Amount > 85 (Cast String เป็น Number อัตโนมัติ)
> db.castingDemo.find("this.Amount > 85");
ผลลัพธ์:
{ "_id" : ObjectId("..."), "Amount" : "200" }
{ "_id" : ObjectId("..."), "Amount" : "100" }
{ "_id" : ObjectId("..."), "Amount" : "110" }
{ "_id" : ObjectId("..."), "Amount" : "95" }
JavaScript this.Amount จะถูกแปลงเป็นตัวเลขก่อนเปรียบเทียบ
ข้อควรระวัง
- การใช้ JavaScript ใน find() ทำงานช้ากว่า Query ปกติ (ไม่ใช้ Index ได้)
- แนะนำให้เก็บข้อมูลในชนิดที่ถูกต้องตั้งแต่แรก (Number แทน String)
- MongoDB 4.0+ มี
$toInt,$toDoubleใน Aggregation สำหรับ Cast อย่างเป็นทางการ