MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bisakah saya menerapkan forEach dalam kueri agregat di MongoDB?

Anda tidak dapat melakukannya dengan pipa agregasi. Anda harus memahami bahwa agregasi MongoDB adalah serangkaian operator khusus yang diterapkan ke koleksi. Saat Anda menjalankan pipa agregasi, MongoDB menyalurkan operator ke satu sama lain yaitu output dari operator menjadi input dari operator berikut. Hasil dari setiap operator adalah kumpulan dokumen baru.

Karenanya apa yang ingin Anda capai di atas dapat dengan mudah ditulis ulang sebagai pipa berikut tanpa perlu membuat larik dokumen terlebih dahulu:

var collection = db.collection('member'), 
    pipeline = [
        { "$match": { createdDate: currentDate, country: 'BD' } },
        {
            "$group": {
                "_id": { "memberType": "$memberType", "country": "$country" },
                "memberCount": { 
                    "$sum": { "$cond":[ { "$gt": ["$numberOfInvitees", 0] }, 1, 0 ] } 
                },
                "sameCount": { "$sum": 1 } 
            }
        }
    ];

collection.aggregate(pipeline, function(err, result){
    if (err) throw err;
    console.log(result);
});

PERBARUI

Menindaklanjuti perubahan pada pertanyaan Anda, menjalankan alur agregasi berikut akan memberi Anda hasil yang diinginkan:

var collection = db.collection('member'), 
    pipeline = [   
        { "$match": { createdDate: currentDate, country: 'BD' } },
        {
            "$group": {
                "_id": { 
                    "memberType": "$memberType", 
                    "country": "$country" 
                },            
                "invitees":{ 
                    "$push":  {
                        "memberID": "$memberID",
                        "count": "$numberOfInvitees"
                    }
                },
                "inviteesList": { "$push": "$numberOfInvitees" },
                "memberCount": { "$sum": 1 } 
            }
        },
        { "$unwind": "$invitees" },
        { "$unwind": "$inviteesList" },
        { 
            "$group": {
                "_id": "$invitees.memberID",
                "sameInviteesCount": { 
                     "$sum": { 
                        "$cond": [ 
                            { "$eq": ["$inviteesList", "$invitees.count"] }, 
                            1, 0 
                        ] 
                    }
                },
                "lessInviteesCount": { 
                    "$sum": { 
                        "$cond":[ 
                            { "$lt": ["$inviteesList", "$invitees.count"] }, 
                            1, 0 
                        ] 
                    }
                },
                "memberCount": { "$first": "$memberCount" }
            }
        }
    ];

collection.aggregate(pipeline, function(err, result){
    if (err) throw err;
    console.log(result);
});



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Agregasi Data Musim Semi MongoDB - cocokkan dengan nilai yang dihitung

  2. Apakah mungkin untuk mengulangi kursor mongo dua kali?

  3. mongo - tidak dapat terhubung ke server 127.0.0.1:27017

  4. Mongodb mengurutkan dokumen berdasarkan nilai komputasi yang kompleks

  5. mongodb:cara memperbarui elemen array dengan nomor indeks