バージョン8.2の新機能。
定義
構文
このステージの構文は、次のとおりです。
{ $score: { score: <expression>, normalization: "none|sigmoid|minMaxScaler", weight: <expression> } }
フィールド
$score
は、次のフィールドがあります。
フィールド | タイプ | 説明 | ||
---|---|---|---|---|
| 式 | 入力スコアから新しい値を計算し、その値を | ||
| 文字列 | 任意。スコアを
| ||
| Double | 任意。正規化後に |
動作
$score
からの出力ドキュメントは入力ドキュメントと同じですが、メタデータとして追加の計算スコアが含まれています。
パイプラインで複数の $score
ステージを指定した場合、パイプラインの最後の $score
ステージが前の $score
ステージのスコアメタデータを上書きします。
例
articles
という名前のコレクションに含まれる以下のドキュメントを考えます。
{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 }, { "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 } { "_id" : ObjectId("55f5a192d4bede9ac365b257"), "author" : "ahn", "score" : 60, "views" : 1000 } { "_id" : ObjectId("55f5a192d4bede9ac365b258"), "author" : "li", "score" : 55, "views" : 5000 } { "_id" : ObjectId("55f5a1d3d4bede9ac365b259"), "author" : "annT", "score" : 60, "views" : 50 } { "_id" : ObjectId("55f5a1d3d4bede9ac365b25a"), "author" : "li", "score" : 94, "views" : 999 } { "_id" : ObjectId("55f5a1d3d4bede9ac365b25b"), "author" : "ty", "score" : 95, "views" : 1000 }
次のクエリでは、 を使用します。
$match
ステージ:views
フィールドの値が1000
以上のドキュメントをフィルタリングします。$score
ステージでは、$sigmoid
式を使用して正規化され、指定された重みを掛けた新しいスコア1
を計算します。
db.articles.aggregate([ { $match: { views: { $gte: 1000 } } }, { $score: { score: "$score", normalization: "sigmoid", weight: 1 } }, { "$project": { "_id": 0, "author": 1, "views": 1, "score": 1, "calculatedScore": { $meta: "score" } } } ])
[ { author: 'ahn', score: 60, views: 1000, calculatedScore: 1 }, { author: 'li', score: 55, views: 5000, calculatedScore: 1 }, { author: 'ty', score: 95, views: 1000, calculatedScore: 1 } ]