Mongo分组 - 如果 - 然后在聚合内进行过滤

时间:2016-02-03 22:05:52

标签: mongodb aggregation-framework

我正在尝试对以下字段进行分组并根据分组进行过滤。

示例:

Document 1 { Id = 1, Name = X, Subject = A}
Document 2 { Id = 1, Name = X, Subject = B}
Document 3 { Id = 1, Name = X, Subject = A}

所以分组应该是Id,Name和If Subjects包含A推A还是推B

在上述情况下,它将是1,X,A

只需要3个值中的一个,但无法通过以下查询获得此值。

db.getCollection('Students').aggregate([
{ $project:
        {
        "_id": 0,
        "Name": 1,
        "Id":1,
        "FilteredSubject": {
            "$cond": {
                "if": {"$eq": ["$Subject","A"]},
                "then":"A",
                "else":"B"                
            }          
        }
        } 
    },
   { $match: 
    {"Name":{$eq: "X"}}
   }
},
    { $group:
     {  _id: {"Id":"$Id", "Name": "$Name"},
        Result: {"$push":"$FilteredSubject"}
     }
    }
    ])

我得到了以下结果,两个主题被推入数组而不是if-else条件,只推动分组中的一个。

实际结果:

"result" : [ 
        {
            "_id" : {
                "Id" : 1,
                "Name" : "X"
            },
            "FilteredSubject" : [ 
                A, 
                B, 
        ]

预期结果:

"result" : [ 
        {
            "_id" : {
                "Id" : 1,
                "Name" : "X",
                "FilteredSubject" : "A"
            }
         }]

0 个答案:

没有答案