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

サブドキュメントの配列の最後の値を選択します

    これを行うには集約フレームワークが必要です。実際には構造を変更する必要があると思いますが、現在の機能を使用して作業します。

    Model.aggregate(
        [
           { "$match": { "prices.100": { "$exists": true } }},
           { "$unwind": "$prices.100" },
           { "$group": {
              "_id": "$_id",
              "price": { "$last": "$prices.100" }
           }},
           { "$project": { "_id": 0, "prices.100": "$price" } }
         ]
    ) 
    

    将来のリリースでは、新しい$sliceを使用できるようになります 演算子:

    Model.aggregate(
        [
            { "$match": { "prices.100": { "$exists": true } } },
            { "$project": {
                "_id": 0,
                "prices.100": { "$slice": ["$prices.100",-1] }
            }}
        ]
    )
    

    実際、「両方」のフィールドを同時に実行できます。

    Model.aggregate(
        [
            { "$match": { "prices.100": { "$exists": true } } },
            { "$project": {
                "_id": 0,
                "prices.100": { "$slice": ["$prices.100",-1] },
                "prices.101": { "$slice": ["$prices.100",-1] }
            }}
        ]
    )
    

    これは、 $unwind および $last $group データを取り戻すために適用されます。

    基本的に、新しい形式の通常のクエリと同じパフォーマンスを発揮します。現在の形式では、遅くなります。



    1. mongodbまたはcassandraを使用した空間データ

    2. -dフラグを使用すると、mongorestoreはどのような種類のファイルまたはディレクトリを予期しますか?

    3. ReactiveMongo FindAndModify Clarification

    4. MongoDBでSpringBootを使用する方法