如何使用MongoDB和Node.js按值数组计数

时间:2019-01-25 10:37:42

标签: node.js mongodb

我需要使用MongoDB和Node.js获取文档总数。我在下面解释我的代码和文档。

var finalOut=[
    {
        "location": "NEW DELHI",
        "nos_of_fos": 15,
        "login_id": [
            "9619300317",
            "9619300343",
            "9619300338",
            "9619300351",
            "9619300322",
            "9619300316",
            "9619300323",
            "9619300328",
            "9619300341",
            "9619300309",
            "9619300310",
            "9619300329",
            "9619300353",
            "9619300356",
            "NORTH@oditeksolutions.com"
        ],

    },
    {
        "location": "North West Delhi",
        "nos_of_fos": 6,
        "login_id": [
            "9619300355"
        ],

    }
]

以上是我的意见。我在下面解释我的代码。

finalOut.forEach(function(listItem, index){
                    Feedback.collection.aggregate([
                        {
                            $match: {
                                login_id: {
                                    $in: listItem['login_id']
                                }
                            }
                        },

                    ])
                    .toArray((cerr,cdocs)=>{
                        console.log(cdocs);
                    })
                    finalOut[index]['total_remarks']=cdocs;
                })

这里我需要feedback文档中存在的所有login_id数组值的总数。

1 个答案:

答案 0 :(得分:0)

您不能将forEach用于异步操作:

在这里,我将使用async库,但您可以使用任何喜欢的库。

async.forEachOf(finalOut, (listItem, index, callback) => {
    Feedback.collection.aggregate([
        {
            $match: {
                login_id: {
                    $in: listItem['login_id']
                }
            }
        },
        {
            $count: ‘theCount’
        }
    ])
    .toArray((cerr,cdocs)=> {
        finalOut[index]['total_remarks']=cdocs.theCount;
        callback();
    })
}, err => {
    // here you can access the filled `finalOut` object
});