Mongodb搜索对象列表



我有一个mongodb集合,它将学生测试成绩与学生ID、他们的测试ID和相应的测试成绩一起存储。一个学生可以参加多个测试,即同一个学生id可能与多个测试id关联,但一个学生不能参加两次测试,因此学生id和测试id的组合将返回一个唯一的文档。

[{
"_id": {
"$oid": ...
},
"StudentId": "12345",
"TestId": "001",
"Score": 2
},{
"_id": {
"$oid": ...
},
"StudentId": "45125",
"TestId": "002",
"Score": 4
},{
"_id": {
"$oid": ...
},
"StudentId": "12345",
"TestId": "002",
"Score": 5
},{
"_id": {
"$oid": ...
},
"StudentId": "45125",
"TestId": "001",
"Score": 2
}]

我想建立一个带有学生id和测试id组合列表的查询,并获得相应的测试分数。

这是我想要构建的查询,用于获取考试id001:的学生分数

TestScores.find([ { "StudentId" : "12345", "TestId": "001"}, { "StudentId": "45125", "TestId": "001"} ])

对于输出:

[{
"_id": {
"$oid": ...
},
"StudentId": "12345",
"TestId": "001",
"Score": 2
}
,{
"_id": {
"$oid": ...
},
"StudentId": "45125",
"TestId": "001",
"Score": 2
}]

mongodb中有没有一种方法可以实现这一点?

据我所知,您正在寻找$or查询

试试

TestScores.find({
$or: [
{
"StudentId": "12345",
"TestId": "001"
},
{
"StudentId": "45125",
"TestId": "001"
}
]
})

演示

在你的具体例子中,由于你只需要获得"TestId": "001"的学生分数,你甚至可以选择这个

TestScores.find({
"TestId": "001"
})

最新更新