【发布时间】:2018-02-28 22:52:57
【问题描述】:
这是我的物品模型。
const itemSchema = new Schema({
name: String,
category: String,
occupied: [Number],
active: { type: Boolean, default: true },
});
我想过滤“占用”数组。所以我使用聚合并展开“占用”字段。
所以我应用匹配查询。并按_id分组。 但如果过滤后的 'occupied' 数组为空,则该项消失。
这是我的代码
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
}
]
我该怎么做??
提前致谢。
【问题讨论】:
-
虽然您最好为数据样本找到“漂亮的打印”选项(现在已经完成了漂亮),但只要提供您拥有的数据的清晰示例,您想要的结果以及您为实现它所做的尝试,很多人可以向您学习如何在这里实际提出问题。这正是应该提出问题的方式。切中要害,圆满。坚持下去。
-
@NeilLunn 感谢您的评论。我会记住的。
标签: node.js mongodb mongoose mongodb-query aggregation-framework