MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB Mongoose fragt ein tief verschachteltes Array von Filialdokumenten nach Datumsbereich ab

Das Problem dabei ist, dass WorkDoneBy ist ein Array, das in einem anderen Array verschachtelt ist (ItemReport ). Daher einzelner $filter ist nicht genug, da Sie zweimal iterieren müssen. Sie können $map hinzufügen um über das äußere Array zu iterieren:

db.records.aggregate([
    {
        "$project": {
            "ItemReport": {
                $map: {
                    input: "$ItemReport",
                    as: "ir",
                    in: {
                        WorkDoneBy: {
                            $filter: {
                                input: "$$ir.WorkDoneBy",
                                as: "value",
                                cond: {
                                    "$and": [
                                        { "$ne": [ "$$value.DateCompleted", null ] },
                                        { "$gt": [ "$$value.DateCompleted", new Date("2017-01-01T12:00:00.000Z") ] },
                                        { "$lt": [ "$$value.DateCompleted", new Date("2018-12-31T12:00:00.000Z") ] }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        }
    }
])