I am new to async and await. Every thing works fine but in final output last value in result, mcount is not returning. Means aggregation output is returning slowly.
Profile and Userinfo are two separate schemas.
flist (req, res){
Profile.findById(req.user)
.select('list.users -_id')
.exec(function (err, result){
if(err){
res.status(400).send("Invalid request")
}
if(result.list.users.length >= 1){
uinfo(result.list.users, req.user)
.then(value =>{
console.log(value)
res.status(200).send({
friends : value
})
})
.catch(err => {
res.status(400).send("Invalid request")
})
}else{
res.status(200).send("No result")
}
})
}
list.users is nested object with id fields. Below one is uinfo function
async function uinfo(data, user){
const arr = []
for(let i of data){
await Userinfo.findById(i.id, 'name', function(err, success){
if(err){
res.status(400).send("Invalid request")
}
const obj = success.toObject()
Profile.aggregate([{"$match": {"_id": {"$in": [user, i.id]}}}, {"$unwind": "$list.users"}, {"$group": {_id: "$list.users.id", count: {$sum: 1}}}, {$match: {count: 2}}, {$project: {_id: 1}}], function(err, result){
if(err){
res.status(400).send("Invalid request")
}
if(result.length >= 1){
obj.mcount = result.length
}
else{
obj.mcount = 0
}
})
arr.push(obj)
})
}
return arr
}
Below one is the output where in last one it is missing mcount.
[ { _id: 5aba75ef60b6c909a859a312,
name: 'user1',
mcount: 0 },
{ _id: 5abbc6fcafafad143a4d4f85,
name: 'user2',
mcount: 1 },
{ _id: 5aba761160b6c909a859a318, name: 'user3' } ]