Kotlin下Firestore如何根据对象数组元素查询指定学生的所有课程
以下是MongoDB场景下的查询方案:
先确认集合存储结构
你给出的结构映射到MongoDB的文档结构一般如下,每个课程对应一条独立文档:
// 数学课程文档 { "courseName": "Math", "id": 1001, "students": [ {"id": 100, "name": "Alex"}, {"id": 101, "name": "mark"} ] } // 物理课程文档 { "courseName": "Physics", "id": 1002, "students": [ {"id": 100, "name": "Alex"}, {"id": 103, "name": "arnold"} ] }
按学生姓名查询(以Alex为例)
直接使用嵌套数组字段匹配语法即可,只要课程的学生数组里存在对应姓名的学生,该课程就会被查询出来:
db.Courses.find( // 查询条件:学生数组中存在name为Alex的元素 { "students.name": "Alex" }, // 配置返回字段,只返回课程名和课程ID,不需要_id { "courseName": 1, "id": 1, "_id": 0 } )
返回结果如下:
{ "courseName" : "Math", "id" : 1001 } { "courseName" : "Physics", "id" : 1002 }
按学生ID查询(更推荐,避免同名问题)
如果存在同名学生,用唯一的学生ID查询更精准,以Alex的学生ID100为例:
db.Courses.find( { "students.id": 100 }, { "courseName": 1, "id": 1, "_id": 0 } )
查询结果和按姓名查询结果一致。
内容的提问来源于stack exchange,提问作者Khalid ElSayed
相关产品推荐
相关产品推荐

