Menu Docs
Página inicial do Docs
/ /

$score (agregação)

Novidades na versão 8.2.

$score

$score calcula e retorna uma nova pontuação como metadados. Ele também normaliza opcionalmente as pontuações de entrada, por padrão para um intervalo entre zero e um.

O estágio tem a seguinte sintaxe:

{
$score: {
score: <expression>,
normalization: "none|sigmoid|minMaxScaler",
weight: <expression>
}
}

$score usa os seguintes campos:

Campo
Tipo
Descrição

score

Expressão

Calcula um novo valor a partir das pontuações de entrada e armazena o valor na palavra-chave $meta searchScore. Todas as outras pontuações são armazenadas na palavra-chave $meta searchScoreDetails. Retorna um erro para entradas não numéricas.

normalization

String

Opcional. Normaliza a pontuação para o intervalo de 0 a 1. O valor pode ser:

  • none - Não normaliza.

  • sigmoid - Aplica a seguinte $sigmoid expressão:

    1 / (1 + e^-x)

    Aqui, x é a pontuação a ser normalizada.

    Se omitido, o padrão é none.

  • minMaxScaler - para aplicar a função de janela $minMaxScaler:

    (s - min_s) / (max_s - min_s)

    Onde:

    • s é a pontuação.

    • min_s é a pontuação mínima.

    • max_s é a pontuação máxima.

weight

Double

Opcional. Número pelo qual multiplicar a expressão score após a normalização.

Os documentos de saída de um $score são iguais aos documentos de entrada, mas incluem pontuação computada adicional como metadados.

Se você especificar vários estágios $score no pipeline, o último estágio $score no pipeline substituirá os metadados de pontuação dos estágios $score anteriores.

Considere os seguintes documentos em uma coleção chamada 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 }

A seguinte query utiliza o:

  • Etapa$match para filtrar os documentos em que o valor do campo views é maior ou igual a 1000.

  • $score estágio para calcular uma nova pontuação que é normalizada usando a $sigmoid expressão e, em seguida, multiplicada pelo peso especificado, 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 }
]

Voltar

$sample

Nesta página