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

$similarityEuclidean (operador de expresión)

Nuevo en la versión 8.3.

$similarityEuclidean

Devuelve la distancia euclidiana entre dos vectores numéricos representados como arreglos o valores binData. La distancia euclidiana mide la distancia en línea recta entre dos puntos en el espacio vectorial.

$similarityEuclidean tiene dos formas de sintaxis.

Sintaxis concisa devuelve una distancia euclidiana en crudo:

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

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

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

Al utilizar la sintaxis completa, acepta los siguientes$similarityEuclidean 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 en el rango (0, 1] utilizando la fórmula 1 / (1 + distance). Vectores idénticos producen una puntuación de 1. El valor por defecto es 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, $similarityEuclidean nulldevuelve.

$similarityEuclidean devuelve double un. Cuando score es false (el valor predeterminado), el resultado es la distancia euclidiana bruta, que siempre es mayor o igual 0 que. Una distancia de 0 significa que los vectores son idénticos. Valores mayores indican una mayor disimilitud.

Cuando score es true, el resultado se normaliza al rango (0, 1] usando la fórmula 1 / (1 + distance):

  • 1 indica que los vectores son idénticos (la distancia es 0).

  • Valores cercanos a 0 indican mayor disimilitud.

$similarityEuclidean 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 la distancia euclidiana entre los campos a y b para cada documento y devuelve tanto la distancia bruta como la puntuación normalizada:

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

La operación devuelve los siguientes resultados:

{ _id: 1, raw: 0, normalized: 1 }
{ _id: 2, raw: 2.8284271247461903,
normalized: 0.2612038749637415 }
{ _id: 3, raw: 5.196152422706632,
normalized: 0.16139702886038895 }