 |
ต้องการเลือกข้อมูลที่มากที่สุด ใน account นั้นๆ ออกมาแสดงเพียงแค่1 (JavaScript) |
|
 |
|
|
 |
 |
|
Code (JavaScript)
.find({}).sort("account_name":-1).limit(1)
|
 |
 |
 |
 |
Date :
2021-08-08 12:46:18 |
By :
TheGreatGod_of_Death |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่เคยเขียน mongoDB เหมือนกัน
แต่คิดว่า sql statement มาตรฐาน ก็คงใช้ได้
Code (SQL)
select fm.* from tablename fm, (
select max(m.id) x
from (select user_id, max(amt) mx from tablename group by user_id) as t
left join tablename as m on m.user_id = t.user_id and t.mx=m.amt
group by user_id) tx
where fm.id=tx.x
1 หาค่า user_id และค่า max ของ field ที่ต้องการ
2 กรณีที่ มี่ user_id ซ้ำกัน และค่ารวมซำกันอีก ก็ต้องเลือกมา 1 รายการ จาก id โดยนำค่าล่าสุดมาใช้(หรือค่าแรกก็ว่ากันไป)
นี่แค่ตัวอย่างเท่านั้นนะครับ ต้อง generate sql statement ให้ได้ตามนี้
|
ประวัติการแก้ไข 2021-08-08 15:33:08 2021-08-08 15:37:22
 |
 |
 |
 |
Date :
2021-08-08 15:31:09 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Native JS ใชได้กับ JS ทุกตัว แม้แต่ Node.js แต่คุณต้องเช็คค่า max เอง
ที่ผมให้ลิงค์ไปเป็นของสำเร็จเขา implement มาให้แล้ว ไม่ต้องไปเขียนเอง
แค่ใส่ option ในรูปแบบ JSON string ก็ได้แล้ว
อีกอย่างการใช้ฟังก์ชันจะทำงานช้ากว่า เพราะมันจะไล่เช็คทีละค่า จนครบทุกค่าก่อนรีเทิร์น
|
 |
 |
 |
 |
Date :
2021-08-09 12:35:04 |
By :
TheGreatGod_of_Death |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สมมติ
Code (JavaScript)
db.employees.find({})
ได้
Code
{ "_id" : ObjectId("5f2cfbcf0694cb7ba344f46b"), "employeeId" : 1, "employeeName" : "Anand" }
{ "_id" : ObjectId("5f2cfbd80694cb7ba344f46c"), "employeeId" : 2, "employeeName" : "Wayne" }
{ "_id" : ObjectId("5f2cfbf10694cb7ba344f46d"), "employeeId" : 3, "employeeName" : "Clark" }
{ "_id" : ObjectId("5f2cfc050694cb7ba344f46e"), "employeeId" : 2, "employeeName" : "Juan" }
{ "_id" : ObjectId("5f2cfc3b0694cb7ba344f46f"), "employeeId" : 3, "employeeName" : "Naval" }
เอาเฉพาะ employeeId = 2, 3 (1 ไม่ซ้ำ)
ใช้ aggregate -> $group + $match
Code (JavaScript)
db.employees.aggregate([{
$group: {
_id: "$employeeId",
"dups": {
"$push": "$_id"
},
count: {
$sum: 1
}
}
}, {
$match: {
count: {
"$gt": 1
}
}
}, {
$sort: {
count: -1
}
}]);
จะได้
Code
{ "_id" : { "employeeId" : 3 }, "uniqueIds" : [ ObjectId("5f2cfc3b0694cb7ba344f46f"), ObjectId("5f2cfbf10694cb7ba344f46d") ], "count" : 2 }
{ "_id" : { "employeeId" : 2 }, "uniqueIds" : [ ObjectId("5f2cfc050694cb7ba344f46e"), ObjectId("5f2cfbd80694cb7ba344f46c") ], "count" : 2 }
|
 |
 |
 |
 |
Date :
2021-08-09 13:18:31 |
By :
TheGreatGod_of_Death |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สร้างตารางใหม่ insert ให้เหมือนตัวอย่าง และทดสอบตาม No.14
ได้ผลเหมือนกันหรือไม่
|
 |
 |
 |
 |
Date :
2021-08-09 14:17:06 |
By :
TheGreatGod_of_Death |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (JavaScript)
db.employees.insertOne({employeeId: 1, employeeName: "Anand"})
db.employees.insertOne({employeeId: 2, employeeName: "Wayne"})
db.employees.insertOne({employeeId: 3, employeeName: "Clark"})
db.employees.insertOne({employeeId: 2, employeeName: "Juan"})
db.employees.insertOne({employeeId: 3, employeeName: "Naval"})
|
 |
 |
 |
 |
Date :
2021-08-09 14:20:58 |
By :
TheGreatGod_of_Death |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่ได้ให้เปลี่ยน database ครับ
แค่สร้างมาเพื่อทดสอบคำสั่งพื้นฐาน
มีเครื่องตัวเองใช้หรือไม่ เราจะสร้างอะไรก็ได้
ทำแบบง่ายๆ ไปก่อนค่อยนำไปประยุกต์กับของจริง
ผมแค่อยากรู้ว่าคุณรู้จัก JS มากแค่ไหนแค่นั้นเอง
ถ้าใช้แก้ production ของบริษัทก็ จบ 
|
 |
 |
 |
 |
Date :
2021-08-09 14:50:28 |
By :
TheGreatGod_of_Death |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|