これを行うには集約フレームワークが必要です。実際には構造を変更する必要があると思いますが、現在の機能を使用して作業します。
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
データを取り戻すために適用されます。
基本的に、新しい形式の通常のクエリと同じパフォーマンスを発揮します。現在の形式では、遅くなります。