Voici le modèle de mon article.Comment inclure un tableau vide lors du filtrage d'un tableau
const itemSchema = new Schema({
name: String,
category: String,
occupied: [Number],
active: { type: Boolean, default: true },
});
Je veux filtrer le tableau 'occupé'. J'utilise donc le champ agrégé et déroulé 'occupé'.
J'applique donc une requête de correspondance. Et groupe par _id. Mais si le tableau 'occupé' filtré est vide, l'élément disparaît.
Voici mon code
Item.aggregate([
{ $match: {
active: true
}},
{ $unwind:
"$occupied",
},
{ $match: { $and: [
{ occupied: { $gte: 100 }},
{ occupied: { $lt: 200 }}
]}},
{ $group : {
_id: "$_id",
name: { $first: "$name"},
category: { $first: "$category"},
occupied: { $addToSet : "$occupied" }
}}
], (err, items) => {
if (err) throw err;
return res.json({ data: items });
});
Voici les données exemple de
{
"_id" : ObjectId("59c1bced987fa30b7421a3eb"),
"name" : "printer1",
"category" : "printer",
"occupied" : [ 95, 100, 145, 200 ],
"active" : true
},
{
"_id" : ObjectId("59c2dbed992fb91b7421b1ad"),
"name" : "printer2",
"category" : "printer",
"occupied" : [ ],
"active" : true
}
Le résultat ci-dessus requête
[
{
"_id" : ObjectId("59c1bced987fa30b7421a3eb"),
"name" : "printer1",
"category" : "printer",
"occupied" : [ 100, 145 ],
"active" : true
}
]
et le résultat que je veux
[
{
"_id" : ObjectId("59c1bced987fa30b7421a3eb"),
"name" : "printer1",
"category" : "printer",
"occupied" : [ 100, 145 ],
"active" : true
},
{
"_id" : ObjectId("59c2dbed992fb91b7421b1ad"),
"name" : "printer2",
"category" : "printer",
"occupied" : [ ],
"active" : true
}
]
comment pourrais-je faire cela ??
Merci d'avance.
Bien qu'il aurait été préférable que vous trouviez l'option "pretty print" pour les échantillons de données (maintenant joli), en fournissant un exemple clair des données que vous avez, le résultat que vous voulez et la tentative que vous avez Beaucoup de gens pourraient apprendre de vous comment poser une question ici. C'est exactement comme cela que les questions devraient être posées. Au point et complet. Continuez. –
@NeilLunn Merci pour votre commentaire. Je garderai ça à l'esprit. – 125487