Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$similarityDotProduct (operador de expresión)

Nuevo en la versión 8.3.

$similarityDotProduct

Devuelve el producto escalar de dos vectores numéricos representados como arreglos o valores binData. El producto escalar es igual a la suma de los productos de los elementos correspondientes.

$similarityDotProduct tiene dos formas de sintaxis.

Sintaxis concisa devuelve una puntuación cruda del producto punto:

{ $similarityDotProduct: [ <vector1>, <vector2> ] }

Sintaxis completa acepta un parámetro opcional de normalización:

{
$similarityDotProduct: {
vectors: [ <vector1>, <vector2> ],
score: <boolean>
}
}

Al utilizar la sintaxis completa, acepta los siguientes$similarityDotProduct campos:

Campo
Tipo
Necesidad
Descripción

vectors

Arreglo

Requerido

Arreglo de exactamente dos expresiones. Cada expresión debe resolverse en un arreglo de valores numéricos o un valor de binData. Ambos vectores deben tener la misma longitud.

score

Booleano

Opcional

Cuando true, devuelve una puntuación normalizada utilizando la fórmula (1 + dotProduct) / 2. Por defecto está en false.

Para obtener más información sobre las expresiones, consulta Expresiones.

Si alguno de los argumentos se resuelve en null o hace referencia a un campo faltante, $similarityDotProduct nulldevuelve.

$similarityDotProduct devuelve double un. Cuando score es false (el valor predeterminado), el resultado es el producto escalar sin procesar. El valor depende de la magnitud de los vectores de entrada. Los vectores con mayor magnitud producen valores de producto escalar mayores.

Cuando score es true, el resultado se normaliza utilizando la fórmula (1 + dotProduct) / 2. Esta normalización asume vectores de entrada de longitud unitaria (normalizados). Para los vectores de longitud unitaria, el producto escalar sin procesar está en el rango [-1, 1] y la puntuación normalizada está en el rango [0, 1].

$similarityDotProduct devuelve un error en los siguientes casos:

  • Ningún argumento se resuelve en un arreglo o en un valor binData.

  • Los arreglos de entrada o los valores binData tienen diferentes longitudes.

  • Cualquiera de los arreglos contiene elementos no numéricos.

El siguiente ejemplo utiliza una colección vectors:

db.vectors.insertMany( [
{ _id: 1, a: [1, 2, 3], b: [1, 2, 3] },
{ _id: 2, a: [1, 2, 3], b: [3, 2, 1] },
{ _id: 3, a: [1, 2, 3], b: [4, 5, 6] }
] )

La siguiente pipeline de agregación calcula el producto escalar entre los campos a y b para cada documento y devuelve tanto la puntuación bruta como la puntuación normalizada:

db.vectors.aggregate( [
{
$project: {
raw: { $similarityDotProduct: [ "$a", "$b" ] },
normalized: {
$similarityDotProduct: {
vectors: [ "$a", "$b" ],
score: true
}
}
}
}
] )

La operación devuelve los siguientes resultados:

{ _id: 1, raw: 14, normalized: 7.5 }
{ _id: 2, raw: 10, normalized: 5.5 }
{ _id: 3, raw: 32, normalized: 16.5 }