Node js mongoose从集合中的数组中过滤数据



我有一个这样的反应....................................................................................................................................................................................................

{
"data": [
{
"user": "83k13bde05f40640j12075w",
"products": [
{
"type": "shoes",
"amount": 20
},
{
"type": "trousers",
"amount": 6
}
],
"inStock": false
},
{
"user": "9dc3f7de05f40640j12075y",
"products": [
{
"type": "chairs",
"amount": 11
},
{
"type": "bags",
"amount": 16
}
],
"inStock": false
},
{
"user": "6wb3f7ne35f40640m62p2gd",
"products": [
{
"type": "phones",
"amount": 2
},
{
"type": "clothes",
"amount": 15
}
],
"inStock": false
}
]
}

这是输出上述响应的函数

exports.getProducts = async (req,res) => {
const result = await Products
.find({inStock: false})
.select("-_id -createdAt -__v")
.exec()
if(!result) return res.status(400).json({ data: 'No product found' });
if(result.err) return res.json({ err: err });

return res.json({data: result});
}

但是我只想得到数量大于10的产品

所以我的输出应该是这样的

{
"data": [
{
"user": "83k13bde05f40640j12075w",
"products": [
{
"type": "shoes",
"amount": 20
}
],
"inStock": false
},
{
"user": "9dc3f7de05f40640j12075y",
"products": [
{
"type": "chairs",
"amount": 11
},
{
"type": "bags",
"amount": 16
}
],
"inStock": false
},
{
"user": "6wb3f7ne35f40640m62p2gd",
"products": [
{
"type": "clothes",
"amount": 15
}
],
"inStock": false
}
]
}

我试过使用

.find({'products.amount': { $gt: 10 }})

但它没有过滤掉响应

您是否尝试了$elemMatch操作符?

const result = await Products
.find({ 
inStock: false, 
products: { $elemMatch: { amount: { $gt: 10 } } } 
})
.select("-_id -createdAt -__v")
.exec();

您可以使用聚合来实现这一点。首先,使用$match操作符查找数组中条目与您的标准匹配的文档。然后你可以使用$project和$filter运算符返回经过筛选的数组。

const result = await Products.aggregate([
{
"$match" : {
"products" : {
"$elemMatch" : { amount: { $gt: 10 } }
},
}
},
{
$project: {
user: 1,
inStock: 1,
products: {
$filter: {
input: "$products",
as: "products",
cond: { $gt: ["$products.amount", 10] }
}
}
}
}
])
.select("-_id -createdAt -__v")
.exec();

进一步阅读:https://studio3t.com/knowledge-base/articles/filter-elements-from-mongodb-arrays/#how-to-use-filter-and-project

最新更新