Saya memiliki acara nama koleksi dengan bidang berikut dalam dokumen seperti ini

    {
_id:5d712ff47a545e067f0ab152
        eventid:"10nm",
        name:"Meeting With XC",
        status:"Open",
        plans:[{
        _id:5d712ff47a545e067f0ab153
        dataid:1yu7
        }]
    }

Array paket hanya memiliki satu bidang. Saya ingin mendapatkan output kueri seperti ini

{_id:5d712ff47a545e067f0ab152
eventid:"10nm",
name:"Meeting With XC",
status:"Open",
planid:1yu7,
}

Inilah yang saya coba dengan luwak

let events=await Event.find({"status":"Open"},{"eventid":1,"name":1,"planid":1},{"planid":{"$map": { "input": "$plans", "as": "ar", "in": "$$ar.dataid" }}});

Tetapi hanya mengembalikan nama bidang dan eventid. Bagaimana cara mendapatkan output ini?. Terima kasih atas bantuan Anda.

3
trinity 21 September 2019, 10:50

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan agregasi di bawah ini

db.collection.aggregate([
  { "$match": { "status": "Open" }},
  { "$addFields": {
    "planId": {
      "$arrayElemAt": ["$plans.dataid", 0]
    }
  }},
  { "$project": { "plans": 0 }}
])
1
Ashh 21 September 2019, 08:21