если агрегирование MongoDB - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно отобразить currentLocation, процесс которого завершен, которые представлены в четырех разных коллекциях. Это цепной процесс, в порядке лабораторных испытаний, внутри, товаров, производства. У каждого из них разные коллекции. Я хочу получить результат, при котором, если статус labtest завершен, он переходит во внутрь, если статус внутрь также завершается, то он идет и проверяет товары. Если статус товара - В процессе, он должен возвращаться внутрь как currentLocation.

Но я получаю ответ как Производство .... мне кажется, что если условие не работает. Пожалуйста, помогите мне решить эту проблему

async function getGrnDetails(userParam) {
  var user = User.findOne({ grnNo: userParam.grnNo })
    var userss = User.aggregate([

        {
            $match:
            {

                grnNo: userParam.grnNo

            }
        }, {
            $lookup: {
                from: "goods",
                let: { grnNo: "$grnNo" },
                pipeline: [
                    {
                        $match: {
                            $expr:
                            {
                                $eq: ["$grnNo", '$$grnNo']
                            }
                        }
                    },
                ],
                as: "Goods",

            },
        },
        {
            $lookup: {
                from: "inwards",
                let: { grnNo: "$grnNo" },
                pipeline: [

                    {
                        $match: {
                            $expr:
                            {
                                $eq: ["$grnNo", '$$grnNo']
                            }
                        }
                    }
                ],
                as: "Inwards",


            }
        },
        {
            $lookup: {
                from: "productions",
                let: { grnNo: "$grnNo" },
                pipeline: [
                    {
                        $match: {
                            $expr:
                            {
                                $eq: ["$grnNo", '$$grnNo']
                            }
                        }
                    },
                ],
                as: "Productions",
            }
        },
        {
            $unwind: {
                "path": "$Productions"
            }
        },{
            $unwind: {
                "path": "$status"
            }
        },{
            $unwind: {
                "path": "$Goods"
            }
        },

        {
            $unwind: {
                "path": "$Inwards"
            }
        },
        {
            $group: {
                "_id": {
                    beforeHeadSettingArray: '$beforeHeadSettingArray',
                    beforeWashingArray: '$beforeWashingArray', id: '$id',
                    status: '$status', defaultAccountId: '$defaultAccountId',
                    beforeStenterArray: '$beforeStenterArray',
                    beforeCompactingArray: '$beforeCompactingArray',
                    afterCompactingArray: '$afterCompactingArray',
                    status: "$status",
                    Goods: '$Goods.processArray', Inwards: '$Inwards.fabricArray', Production: '$Productions.operationDisplay', currentLocation: {

                        $cond: {
                            if: {
                                $strcasecmp: ["$status", "Completed"]
                            }, then: {
                                $cond: {
                                    if: {
                                        $strcasecmp: ["$Inwards.status", "Completed"]
                                    },
                                    then: {
                                        $cond: {
                                            if: {
                                                $strcasecmp: ["$Goods.status", "Completed"]
                                            },

                                            then:
                                            {
                                                $cond: {
                                                    if: {
                                                        $strcasecmp: ["$Productions.status", "Completed"]
                                                    },

                                                    then: "Productions",
                                                    else: "Goods"
                                                }
                                            },
                                            else: "Inwards"
                                        }
                                    },
                                    else: "LabTest"
                                }
                            },
                            else: "Yet To be Started"

                        }
                    }
                },
                "ProgressArray": {
                    $addToSet: {
                        "Inwards": "$Inwards.status",
                        "Goods": "$Goods.status",
                        "Productions": "$Productions.status",
                        "LabTest": "$status"
                    },
                }




            }
        }  ,{ $sort: { _id: 1 } },
        { $limit: 1 }

    ]);


    return await userss
}

1 Ответ

0 голосов
/ 23 марта 2020
  The Problem is I used strcasecmp, when I changed to eq it worked perfectly

    currentLocation: {

                            $cond: {
                                if: {
                                    $eq: ["$status", "Completed"]
                                }, then: {
                                    $cond: {
                                        if: {
                                            $eq: ["$Inwards.status", "Completed"]
                                        },
                                        then: {
                                            $cond: {
                                                if: {
                                                    $eq: ["$Goods.status", "Completed"]
                                                },

                                                then:
                                                {
                                                    $cond: {
                                                        if: {
                                                            $eq: ["$Productions.status", "Completed"]
                                                        },

                                                        then: "Finished",
                                                        else: "Productions"
                                                    }
                                                },
                                                else: "Goods"
                                            }
                                        },
                                        else: "Inwards"
                                    }
                                },
                                else: "LabTest"

                            }
                        }
                        ,
...