sql >> データベース >  >> NoSQL >> MongoDB

MongoDB Mongooseは、日付範囲ごとに深くネストされたサブドキュメントの配列をクエリします

    ここでの問題は、WorkDoneBy 別の配列にネストされた配列です(ItemReport )。したがって、単一の$filter 2回繰り返す必要があるため、十分ではありません。 $map を追加できます 外側の配列を反復処理するには:

    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. 配列をn個の属性を持つドキュメントのマップに変換するクエリ

    2. Mongoシェルはファイルからクエリを実行し、結果を表示します

    3. MongoDB $ concatArrays

    4. NoSQL-MongoDBとCouchDB