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

MongoDBは、二重ネストされた配列内で最大日付を取得します

    $map を使用する必要があります 外部アレイをスキャンし、 $ filter 内部配列の要素を $max と比較します 日付:

    db.collection.aggregate([
        {
            $addFields: {
                inquiries: {
                    $map: {
                        input: "$inquiries",
                        as: "inquiry",
                        in: {
                            inquiryId: "$$inquiry.inquiryId",
                            routeHistory: {
                                $filter: {
                                    input: "$$inquiry.routeHistory",
                                    cond: {
                                        $eq: [ { $max: "$$inquiry.routeHistory.routeDate" }, "$$this.routeDate" ]
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    ])
    

    Mongo Playground

    編集:あなたのリンクを見ると、$mapに気づきました はサポートされていないため、回避策として以下の組み合わせを使用できます:

    db.collection.aggregate([
        {
            $unwind: "$inquiries"
        },
        {
            $addFields: {
                "inquiries.routeHistory": {
                    $filter: {
                        input: "$inquiries.routeHistory",
                        cond: {
                            $eq: [ { $max: "$inquiries.routeHistory.routeDate" }, "$$this.routeDate" ]
                        }
                    }
                }
            }
        },
        {
            $group: {
                _id: "$_id",
                callId: { $first: "$callId" },
                caller: { $first: "$caller" },
                inquiries: { $push: "$inquiries" }
            }
        }
    ])
    

    モンゴプレイグラウンド(2)




    1. MongoDBの配列の特定の位置に値を挿入します

    2. ObjectIdの日付でMongoDBの結果を集計します

    3. MongoDBでは、$ setをどのように使用してネストされた値/埋め込みドキュメントを更新しますか?

    4. Jedis接続を取得できません。プールからリソースを取得できませんでした