按嵌套数组/对象值在不同级别上过滤,按$ push按多个级别过滤-MongoDB Aggregate

问题描述

我有一个具有多个嵌入式子文档级别的文档,每个子文档都有一些嵌套数组。使用$ unwind和sort,根据日期的降序进行排序,并使用push将每行记录组合为单个数组。此推送仅在一个级别上起作用,这意味着它仅允许一次推送。如果要在嵌套级别上执行相同的操作并保留顶级数据,请获取“ errmsg”:“无法识别的表达式'$ push'”。

{
        "_id" : ObjectId("5f5638d0ff25e01482432803"),"name" : "XXXX","mobileNo" : 323232323,"payroll" : [
                {
                        "_id" : ObjectId("5f5638d0ff25e01482432801"),"month" : "Jan","salary" : 18200,"payrollDetails" : [
                                {
                                        "day" : "1","salary" : 200,},{
                                        "day" : "2","salary" : 201,}
                        ]
                },{
                        "_id" : ObjectId("5f5638d0ff25e01482432802"),"month" : "Feb","salary" : 8300,"salary" : 300,"salary" : 400,}
                        ]
                }
        ],}

Expected Result:
{
        "_id" : ObjectId("5f5638d0ff25e01482432803"),"payrollDetails" : [
                                {
                                        "day" : "2","salary" : 201
                                },{
                                        "day" : "1","salary" : 200
                                }
                        ]
                },"salary" : 400
                                },"salary" : 300
                                }
                        ]
                }
        ],}

当天将被排序,其余所有内容都相同

我已经尝试过,但是得到了无法识别的表达式'$ push'

db.employee.aggregate([
{$unwind: '$payroll'},{$unwind: '$payroll.payrollDetails'},{$sort: {'payroll.payrollDetails.day': -1}},{$group: {_id: '$_id',payroll: {$push: {payrollDetails:{$push: 
'$payroll.payrollDetails'} }}}}])

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)