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

วิธีดึงเอกสารทั้งหมดตามการเปรียบเทียบกับคอลเลกชันทั้งหมดใน MongoDB

ใช้ $$ROOT ใน Aggregate Pipeline

$$ROOT อ้างถึงเอกสารทั้งหมดในขั้นตอนปัจจุบัน สามารถนำไปใช้ใน $project แล้วค่อย $sort และ $group เพื่อหาเอกสารล่าสุดของแต่ละกลุ่ม

สร้างข้อมูลตัวอย่าง

> db.demo743.insertOne({id:1,"ShippingDate":"2020-01-21",value:50});
> db.demo743.insertOne({id:2,"ShippingDate":"2020-05-10",value:30});
> db.demo743.insertOne({id:3,"ShippingDate":"2020-05-10",value:60});
> db.demo743.insertOne({id:1,"ShippingDate":"2020-05-11",value:75});

แสดงข้อมูลทั้งหมด

> db.demo743.find();

ผลลัพธ์:

{ "_id" : ObjectId("5ead893a57bb72a10bcf0680"), "id" : 1, "ShippingDate" : "2020-01-21", "value" : 50 }
{ "_id" : ObjectId("5ead893c57bb72a10bcf0681"), "id" : 2, "ShippingDate" : "2020-05-10", "value" : 30 }
{ "_id" : ObjectId("5ead894657bb72a10bcf0682"), "id" : 3, "ShippingDate" : "2020-05-10", "value" : 60 }
{ "_id" : ObjectId("5ead895657bb72a10bcf0683"), "id" : 1, "ShippingDate" : "2020-05-11", "value" : 75 }

คิวรีหาเอกสารล่าสุดของแต่ละ id ตาม ShippingDate

> db.demo743.aggregate([
    { "$project": { "id": "$id", "ShippingDate": "$ShippingDate", "MyDoc": "$$ROOT" } },
    { "$sort": { "ShippingDate": -1 } },
    { "$group": { "_id":{ "id":"$id" }, "Result":{ "$first":"$MyDoc" } } },
    { "$project": { "Result.ShippingDate":1, "Result.id":1, "Result.value":1, _id:0 } }
])

ผลลัพธ์

{ "Result" : { "id" : 3, "ShippingDate" : "2020-05-10", "value" : 60 } }
{ "Result" : { "id" : 2, "ShippingDate" : "2020-05-10", "value" : 30 } }
{ "Result" : { "id" : 1, "ShippingDate" : "2020-05-11", "value" : 75 } }