我正在一个MERN项目中工作,我想通过inside objectid从对象数组内部获取数据。
我的模型视图
我想通过objectid:"63cbb3b15cd59c7810ab89a2
获取name:"vikash"
和attendance:"present"
我尝试了以前stackoverfow解决方案中的两种方法,但它们对我不起作用
app.get('/stud/:id', (req, res) => {
ProjectSchema.find({"projectmembers._id":req.params._id}, (err, data) => {
if (err) return res.status(500).send(err);
res.status(200).send(data);
});
})
第二个是
app.get('/stu/:id', (req, res) => {
ProjectSchema.aggregate([
{
$unwind:"$projectmembers"
},
{$match : {
"projectmembers._id" : req.params._id
}}
], (err, data) => {
if (err) return res.status(500).send(err);
res.status(200).send(data);
});
})
两个代码的输出均为[]
1条答案
按热度按时间3htmauhk1#
你的代码中还有一个打字错误,参数名是
id
,所以应该是req.params.id
而不是req.params._id
--这可能是你收到一个空数组的原因。对于您的情况,您可以对结果进行
filter
,以便通过聚合只接收特定id的项目成员。例如:
你可以看到有一个
$project
stage--它告诉mongo你想要返回什么,我写了_id: 0
,它告诉mongo你不想返回document's _id
字段,然后$filter
stage有一个input
字段,它告诉mongo过滤什么--在我们的例子中是projectmembers
.在$as
字段中是projectmembers
数组中每一项的变量名,我把它命名为projectMember
,你可以随意命名它,然后我们可以通过变量projectMember
访问每一项,在我们的条件语句中,我们传递了一个条件,它检查projectmembers
阵列中是否有任何等于req.params.id
的$$projectMember._id
(在eq
条件下,我们用两个$$
作为projectMember.id
的前缀以便访问它)。要访问ObjectId,您需要将其导入到文件的顶部:
最后,您还可以在Mongo Playground中看到mongo聚合是如何工作的,并可以尝试使用它。