$ elemMatch在mongodb中用于过滤引用的($ ref)数组对象不起作用

问题描述 投票:0回答:1

我有2个集合student_details和subject_details,其中每个学生可以将多个主题存储在student_details集合中作为参考数组。

现在,我需要获取学生详细信息以及已过滤的主题,其中subject_details.status = ACTIVE。

如何使用$elemMatch$ref对象实现此目的。我正在使用类似下面的内容,但是它没有返回任何记录。

db.getCollection('student_details').find( { subjects: { $elemMatch: { $ref: "subject_details", status: 'ACTIVE' }}})

student_details
================
{
    "_id" : "STD-1",
    "name" : "XYZ",
    "subjects" : [ 
        {
            "$ref" : "subject_details",
            "$id" : "SUB-1"
        },
        {
            "$ref" : "subject_details",
            "$id" : "SUB-2"
        },
        {
            "$ref" : "subject_details",
            "$id" : "SUB-3"
        }
    ]
}

subject_details
===============
{
    "_id" : "SUB-1",
    "name" : "MATHEMATICS",
    "status" : "ACTIVE"
}

{
    "_id" : "SUB-2",
    "name" : "PHYSICS",
    "status" : "ACTIVE"
}

{
    "_id" : "SUB-3",
    "name" : "CHEMISTRY",
    "status" : "INACTIVE"
}


mongodb spring-boot mongodb-query spring-data spring-data-mongodb
1个回答
0
投票

因为它们位于2个集合中,所以您需要$ lookUp才能将它们组合在一起...在此之前,我相信您需要$ unwinding Subjects数组...在这里是空代码,所以这不是一般建议的答案...聚合管道用于分阶段完成这些任务...

假设您是该职位的缩写...因为如果主题详细信息实际上只是3个字段,则在NoSQL世界中最好将您的架构与学生详细信息一起使用并使用1个集合而不是规范化的关系方法来更好地服务您的架构] >

© www.soinside.com 2019 - 2024. All rights reserved.