Tengo algunos documentos mongodb como este
{'_id':'1', 'year':2020, 'season':'Summer', 'status':'Over'}, {'_id':'2', 'year':2020, 'season':'Winter', 'status':'Pending'}, {'_id':'3', 'year':2020, 'season':'Rainy', 'status':'Pending'}, {'_id':'4', 'year':2021, 'season':'Summer', 'status':'Pending'} ........ ... .
Si doy una entrada de una serie de años [2020,2021], entonces mi salida esperada debería ser
[{year:2020,sesason:['Winter','Rainy']},{year:2021,sesason:['Summer','Winter','Rainy']}]
donde la matriz de temporada solo debe contener valores cuyo estado sea 'Pendiente'. Probé este código, pero no obtuve el resultado esperado
var arr =[]; var yearsArray = [2020,2021] var seasonArray = ['Summer','Rainy','Winter'] var pendingSeasons = []; return await Promise.all( yearsArray.map(async(year) =>{ return await Promise.all( seasonArray.map(async(tP) =>{ await db.collection('CC') .find({'year':year,'season':tP}) .toArray() .then((data) =>{ if(data.status != 'Over'){ pendingSeasons.push(tP) } }) }) ).then(arr.push({"year":year,"season":pendingSeasons})) }) ).then(() =>{ return arr })
La salida que obtengo se da a continuación:
[ { "year": 2020, "season": [ "Summer","Rainy","Winter","Summer","Rainy","Rainy","Summer", "Winter","Winter"] }, { "year": 2021, "season": ["Summer","Rainy","Winter","Summer","Rainy","Rainy", "Summer","Winter","Winter"] } ]
El problema es donde estás comparando dos cadenas.
if(data.status != 'Over'){ pendingSeasons.push(tP) }
Debería ser como:
if(data.status.localeCompare("Over") != 0){ pendingSeasons.push(tP) }
tengo la respuesta
var Data = db.collection('CC').find({}).toArray(); var yrsArray = [2020,2021] var seasonArray = ['Summer','Rainy','Winter'] let yrResult = []; let yrObj = {} yrsArray.forEach((element) => { yrObj = {}; yrObj.year = element; let season = []; let year = Data.filter((element1) => element1.year == element) for (var i=0;i<seasonArray.length;i++){ const currentSeason = year.filter((element)=>element.season == seasonArray[i]) if(currentSeason.length == 0){season.push(seasonArray[i])} else if(currentSeason[0].status != "Over") {season.push(seasonArray[i])} yrObj.season = season; } yrResult.push(yrObj) }) return yrResult