これは私のアイテムモデルです。配列をフィルタリングするときに空の配列を含める方法
const itemSchema = new Schema({
name: String,
category: String,
occupied: [Number],
active: { type: Boolean, default: true },
});
「占有」の配列をフィルタリングしたいですか?だから私は集計を使用し、 '占有'フィールドを巻き戻します。
だから私は一致クエリを適用します。 _idでグループ化する。 フィルタされた '占有'配列が空の場合、項目は消えます。ここで
は私のコードここ
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 });
});
は、例えば、データが
{
"_id" : ObjectId("59c1bced987fa30b7421a3eb"),
"name" : "printer1",
"category" : "printer",
"occupied" : [ 95, 100, 145, 200 ],
"active" : true
},
{
"_id" : ObjectId("59c2dbed992fb91b7421b1ad"),
"name" : "printer2",
"category" : "printer",
"occupied" : [ ],
"active" : true
}
クエリ
[
{
"_id" : ObjectId("59c1bced987fa30b7421a3eb"),
"name" : "printer1",
"category" : "printer",
"occupied" : [ 100, 145 ],
"active" : true
}
]
と私は
[
{
"_id" : ObjectId("59c1bced987fa30b7421a3eb"),
"name" : "printer1",
"category" : "printer",
"occupied" : [ 100, 145 ],
"active" : true
},
{
"_id" : ObjectId("59c2dbed992fb91b7421b1ad"),
"name" : "printer2",
"category" : "printer",
"occupied" : [ ],
"active" : true
}
]
を望む結果上記の結果を設定されています210
どうすればいいですか?
ありがとうございます。
あなたが持っているデータの明確な例、あなたが望む結果、およびあなたが持っている試みを提供する限りでは、データサンプルのための「かわいい」オプションを見つけたことが望ましいでしょうそれを達成するために作られた、多くの多くの人々は実際にここで質問をする方法をあなたから学ぶことができます。これは正確にどのように質問するべきかです。ポイントと完全に。がんばり続ける。 –
@NeilLunnコメントありがとうございました。私はそれを念頭に置くでしょう。 – 125487