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

MongoDBで$slice$ filterの結果を使用するにはどうすればよいですか?

    これを行う1つの方法は、次のようになります(ただし、パフォーマンス上の理由から、データの構造とインデックス設定によっては$ matchステージは必要ありません):

     db.item.aggregate([
        { "$project": { 
            "items": { 
                "$slice": [ 
                    { "$filter": { 
                        "input": "$items",
                        "as": "item", 
                        "cond": { "$eq": [ "$$item.status", "active" ] } 
                    }}, 
                    -3,2 
                ] 
            } 
        }}
    ])
    

    ただし、次のクエリを使用する方がおそらく良いと思います。

    db.items.db.aggregate([
    {
        $project: {
            "items": {
                "$filter": { 
                    "input": "$items",
                    "as": "item", 
                    "cond": { "$eq": [ "$$item.status", "active" ] } 
                }
            } 
        }
    }, {
        $project: {
            "items": {
                $slice: [
                    {
                        $slice: [
                            "$items",
                            {
                                $subtract: [ { $size: "$items" }, 1 ] // length of items array minus one
                            } 
                        ]
                    }, 2 // max two elements
                ]
            }
        }
    }])
    

    これは、最初に最後の要素を削除してから、出力を2つの項目に制限するためです。これは、「アクティブな」要素が3つ未満の状況でおそらく必要なものです。




    1. マングースサブ配列でのオブジェクトのクエリ

    2. peclを使用してMongodbドライバーをOSXEl Capitan(v10.11.1)にインストールする

    3. mongodb集計フレームワークを使用して頻度を計算する

    4. mongodbphpアップデートのarrayFilters