Hi Everyone
Currently doing an aggregation where we use $facet to run multiple pipelines at once to create an object. However, I want to limit/filter so for example in the $match stage if at least 10 documents are not returned we stop this pipeline.
I have put my query below and explain it. Also if there is a better way to do this let me know. (I am using the Node driver)
const similar = await db
.collection(collection)
.aggregate([
{
$facet: entities.reduce((total, entity) => {
total[entity._id] = [
{
$match: {
type,
entity: Mongo.toID(entity._id),
},
},
{
$project: {
_id: 0,
from: 1,
to: 1,
type: 1,
totalCO2e: 1,
consumption: 1,
totalCost: 1,
totalWeight: 1,
unit: 1,
},
},
];
return total;
}, {}),
},
])
.toArray();
“entities” is an array of objects that look like this:
{_id: "object id as a string", scale: number}
Basically, I create a pipeline for each id in the entities array inside the $facet.
For each entity id, we do a $match based on type which is a string and if the key entity matches the id
I then do a project to only return the data I need.
However, it would be great to stop a pipeline if there is not going to more than 10 documents returned for that entity id