Tengo una base de datos MongoDB con el siguiente formato:
{ "_id": xxx, "timestamp": "1643649900000", "scores": [{ "name": "APPL", "price": 80 }, { "name": "GOOGL", "price": 83, }, { "name": "COMPI", "price": 76, }, { "name": "and more names which also can change in the following documents", "price": 76, }] }, { "_id": yyy, "time": "1644350400000", "scores": [{ "name": "STCMP", "price": 33 }, { "name": "APPL", "price": 95, }, { "name": "GOOGL", "price": 83, }, { "name": "MINN", "price": 76, }] },Necesito sumar todos los precios por vez pero excluyendo (o restando de la suma) algunos.
Mi lista de puntajes tiene alrededor de 200 dictados y quiero excluir alrededor de 5 de ellos. Solo logré hacer la parte de suma, pero después de dos días de búsqueda todavía no puedo excluir con mi conocimiento limitado.
toBeExcluded = ["APPL", "GOOGL"] sums.aggregate([ { "$unwind" : "$scores" }, { "$group": { "_id": "$time", "total": { "$sum": "$scores.price" } } }, { "$addFields":{ "timeAdj": {"$toInt": [{"$subtract":[{"$divide": ["$_id", 1000]}, 300]}]} } }, { "$sort": {"timeAdj":1} } ]))use $cond y verifique los nombres que se excluirán usando $in , en su $sum :
db.collection.aggregate([ { "$unwind": "$scores" }, { "$group": { "_id": "$time", "total": { "$sum": { "$cond": [ { "$in": [ "$scores.name", [ "APPL", "GOOGL" ] ] }, 0, "$scores.price" ], } } } }, ])