我的架构中有一个字符串数组,并且我试图根据文档包含或不包含某些字符串的数组来过滤文档。以下是我的架构,其中的成分数组是我尝试过滤的依据:
const foodSchema = mongoose.Schema({
name: {
type: String,
required: true,
trim: true,
},
ingredients: [
{
type: String,
required: true,
trim: true,
},
],
});
在nodejs中,我的快速路由器中包含以下内容:
router.get('/food', auth, async (req, res) => {
const match = {};
if (req.query.name) {
match.name = req.query.name;
}
if (req.query.ingredients) {
match.ingredients = req.query.ingredients;
}
try {
const allFood = await Food.find(match);
res.send({
allFood,
});
} catch (error) {
res.status(400).send(error);
}
});
以下是发送请求的示例:
{{url}}/food?ingredients=Salmon Meal&ingredients=Deboned Turkey
我希望获得所有食品文件,其中它们的成分数组同时包含鲑鱼粉和去骨火鸡,但我总是得到一个空数组。外壳是正确的。如果我仅在查询中使用一种成分,它就可以正常工作。
使用$in
if (req.query.ingredients && req.query.ingredients.length > 0) {
match.ingredients = { $in: req.query.ingredients };
}
使用$all
match.ingredients = { $all: req.query.ingredients };
https://docs.mongodb.com/manual/reference/operator/query/all/
尝试
foodSchema.find().all('ingredients', ['Salmon', 'Meal', 'Deboned']);