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

ใช้ Stored JavaScript ใน MongoDB (db.system.js)

MongoDB รองรับการเก็บฟังก์ชัน JavaScript ไว้ในระบบ (Stored Procedures) ในคอลเลกชันพิเศษ system.js

Syntax การบันทึกฟังก์ชัน

db.system.js.save({
  _id: "functionName",
  value: function (param) {
    return 'message ' + param;
  }
})

ตัวอย่าง: บันทึกฟังก์ชัน returnValue

> db.system.js.save({
...   _id: "returnValue",
...   value: function (data) {
...     return 'The value==== ' + data;
...   }
... });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

เรียกใช้ฟังก์ชันด้วย db.eval() (Deprecated)

> db.eval("returnValue(20)");
WARNING: db.eval is deprecated

ผลลัพธ์:

The value==== 20

⚠️ ข้อควรระวังสำคัญ

  • db.eval() ถูก Deprecated ตั้งแต่ MongoDB 3.0 และลบใน 4.2+
  • Stored JS ไม่แนะนำให้ใช้ใน Production เพราะ:
    • Lock database ขณะรัน (Global write lock ในรุ่นเก่า)
    • ไม่รองรับ Sharding
    • Security risk (JavaScript injection)
    • Performance แย่กว่า Native operations
  • MongoDB ไม่ใช่ RDBMS - ไม่ควรย้าย Business Logic มาใส่ใน DB

ทางเลือกที่ดีกว่า

  • ประมวลผลใน Application Layer (Node.js, Python, Java, etc.)
  • ใช้ Aggregation Pipeline ($function ใน MongoDB 4.4+ สำหรับ custom logic)
  • ใช้ Atlas Triggers / Realm Functions สำหรับ Server-side logic

ดูฟังก์ชันที่เก็บไว้

db.system.js.find();

ลบฟังก์ชัน:

db.system.js.remove({_id: "functionName"});