我有一个数据从MongoDB那里我得到了代理的所有数据,我想得到的testimonials
与isDisplayed
是唯一的真.有没有办法在ExpressJS & MongoDB中,我可以过滤的证明密钥?
我是这么试的
const getSingleAgent = expressAsync(async (req, res) => {
const agent = await Agents.findOne({
_id: req.params.id,
});
res.json(agent);
} else {
res.status(404);
throw new Error("Agent not found.");
}
});
实际结果
{
"_id": "63ea901a85d4fbd62fb887b3",
"name": "test namee",
"isDeclined": false,
"testimonials": [
{
"isDisplayed": true,
"name": "test123123123123123",
},
{
"isDisplayed": false,
"name": "test123123123123123",
},
{
"isDisplayed": false,
"name": "test@gmail.com",
},
],
}
预期结果
{
"_id": "63ea901a85d4fbd62fb887b3",
"name": "test namee",
"isDeclined": false,
"testimonials": [
{
"isDisplayed": true,
"name": "test123123123123123",
},
],
}
1条答案
按热度按时间pcww981p1#
您可以将$elemMatch用于投影阶段,如下所示:
示例here
但是要小心。使用
$elemMatch
只会返回第一个匹配项。看看this example,其中有两个true
,但只返回一个。如文件所述:
$elemMatch
运算符将查询结果中字段的内容限制为仅包含与$elemMatch条件匹配的第一个元素。因此,如果您拥有或想要多个值,可以使用pipelina和$filter并将其聚合到
$project
阶段中:示例here
请注意,如果this example中存在两个
true
值,则两个值都显示。