sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Mongoose frågar efter en djupt kapslad uppsättning underdokument efter datumintervall

Problemet här är att WorkDoneBy är en array kapslad i en annan array (ItemReport ). Därför enstaka $filter räcker inte eftersom du behöver iterera två gånger. Du kan lägga till $map att iterera över den yttre arrayen:

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") ] }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        }
    }
])


  1. Hur man utesluter vissa fält från dokumentet

  2. mongodb-uppdateringar visas inte om jag inte startar om nodservern

  3. Varför rekommenderas inte att starta en solo MongoDB-instans som replikuppsättning i produktion?

  4. Mongodb:Ostödd konvertering från array till objectId i $convert utan onError-värde