ใช้ $cmp ใน $project แล้ว $match
โอเปอเรเตอร์ $cmp เปรียบเทียบค่าสองฟิลด์ คืนค่า: 1 (มากกว่า), 0 (เท่ากัน), -1 (น้อยกว่า)
ตัวอย่าง
สร้างคอลเลกชัน matchBetweenFieldsDemo:
> db.matchBetweenFieldsDemo.insertOne({"FirstValue":40,"SecondValue":70});
> db.matchBetweenFieldsDemo.insertOne({"FirstValue":20,"SecondValue":5});
Aggregation: หาเอกสารที่ FirstValue > SecondValue
> db.matchBetweenFieldsDemo.aggregate([
{$project: {
firstGreaterThanOrNot: {$cmp: ['$FirstValue', '$SecondValue']}
}},
{$match: {firstGreaterThanOrNot: {$gt: 0}}}
]);
ผลลัพธ์:
{ "_id" : ObjectId("..."), "firstGreaterThanOrNot" : 1 }
เอกสารที่สอง (FirstValue=20, SecondValue=5) มี FirstValue มากกว่า จึงถูกคืนกลับมา
การใช้งานอื่น
สามารถใช้ $cmp ใน $project เพื่อสร้างฟิลด์ flag แล้วค่อย $match หรือ $group ต่อได้