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

$locf (operador de expresión)

$locf

Nuevo en la versión 5.2.

Última observación llevada hacia adelante. Establece los valores para null y los campos ausentes en una ventana al último valor no nulo del campo.

$locf solo está disponible en la $setWindowFields etapa.

La expresión tiene esta $locf sintaxis:

{ $locf: <expression> }

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

Si un campo que se está llenando contiene tanto null como valores no nulos, establece$locf los null valores y faltantes al último valor no nulo conocido del campo según el orden de clasificación especificado $setWindowFields en.

null y los campos faltantes que aparecen antes de los valores no nulos en el orden de clasificación permanecen null.

Si un campo que se está llenando contiene solo null o valores faltantes en una partición, establece el valor del campo$locf en null para esa partición.

Para completar los valores faltantes de campos basados en el último valor observado en una secuencia, se puede utilizar:

Los ejemplos en esta página utilizan una colección stock que contiene un rastreo del precio de las acciones de una sola empresa a intervalos horarios:

db.stock.insertMany( [
{
time: ISODate("2021-03-08T09:00:00.000Z"),
price: 500
},
{
time: ISODate("2021-03-08T10:00:00.000Z"),
},
{
time: ISODate("2021-03-08T11:00:00.000Z"),
price: 515
},
{
time: ISODate("2021-03-08T12:00:00.000Z")
},
{
time: ISODate("2021-03-08T13:00:00.000Z")
},
{
time: ISODate("2021-03-08T14:00:00.000Z"),
price: 485
}
] )

Falta el campo price en algunos de los documentos de la colección.

El siguiente ejemplo utiliza el operador para establecer los campos faltantes al valor del $locf últimonull valor observado que no es:

db.stock.aggregate( [
{
$setWindowFields: {
sortBy: { time: 1 },
output: {
price: { $locf: "$price" }
}
}
}
] )

En el ejemplo:

  • sortBy: { time: 1 } ordena los documentos de cada partición por time en orden ascendente (1), de modo que el time más antiguo sea el primero.

  • Para los documentos donde price falta el campo, el operador establece $locf el price al último valor observado en la secuencia.

Ejemplo de salida:

[
{
_id: ObjectId("62169b65394d47411658b5f5"),
time: ISODate("2021-03-08T09:00:00.000Z"),
price: 500
},
{
_id: ObjectId("62169b65394d47411658b5f6"),
time: ISODate("2021-03-08T10:00:00.000Z"),
price: 500
},
{
_id: ObjectId("62169b65394d47411658b5f7"),
time: ISODate("2021-03-08T11:00:00.000Z"),
price: 515
},
{
_id: ObjectId("62169b65394d47411658b5f8"),
time: ISODate("2021-03-08T12:00:00.000Z"),
price: 515
},
{
_id: ObjectId("62169b65394d47411658b5f9"),
time: ISODate("2021-03-08T13:00:00.000Z"),
price: 515
},
{
_id: ObjectId("62169b65394d47411658b5fa"),
time: ISODate("2021-03-08T14:00:00.000Z"),
price: 485
}
]

Cuando se utiliza la etapa $setWindowFields para rellenar valores faltantes, se pueden asignar valores a un campo diferente al campo desde el cual se está llenando. Como resultado, puede utilizar varios métodos de llenado en una única etapa $setWindowFields y obtener los resultados en campos distintos.

El siguiente pipeline rellena los campos faltantes de price utilizando interpolación lineal y el método last-observation-carried-forward:

db.stock.aggregate( [
{
$setWindowFields:
{
sortBy: { time: 1 },
output:
{
linearFillPrice: { $linearFill: "$price" },
locfPrice: { $locf: "$price" }
}
}
}
] )

En el ejemplo:

  • sortBy: { time: 1 } ordena los documentos por el campo time en orden ascendente, de más antiguo a más reciente.

  • output especifica:

    • linearFillPrice como un campo objetivo a llenar.

      • { $linearFill: "$price" } es el valor para el linearFillPrice campo. $linearFill rellena price los valores faltantes mediante interpolación lineal basada en los price valores circundantes en la secuencia.
    • locfPrice como un campo objetivo a llenar.

      • { $locf: "$price" } es el valor para el locfPrice campo. representalocf la última observación arrastrada. $locf completa price los valores faltantes con el valor del documento anterior en la secuencia.

Ejemplo de salida:

[
{
_id: ObjectId("620ad555394d47411658b5ef"),
time: ISODate("2021-03-08T09:00:00.000Z"),
price: 500,
linearFillPrice: 500,
locfPrice: 500
},
{
_id: ObjectId("620ad555394d47411658b5f0"),
time: ISODate("2021-03-08T10:00:00.000Z"),
linearFillPrice: 507.5,
locfPrice: 500
},
{
_id: ObjectId("620ad555394d47411658b5f1"),
time: ISODate("2021-03-08T11:00:00.000Z"),
price: 515,
linearFillPrice: 515,
locfPrice: 515
},
{
_id: ObjectId("620ad555394d47411658b5f2"),
time: ISODate("2021-03-08T12:00:00.000Z"),
linearFillPrice: 505,
locfPrice: 515
},
{
_id: ObjectId("620ad555394d47411658b5f3"),
time: ISODate("2021-03-08T13:00:00.000Z"),
linearFillPrice: 495,
locfPrice: 515
},
{
_id: ObjectId("620ad555394d47411658b5f4"),
time: ISODate("2021-03-08T14:00:00.000Z"),
price: 485,
linearFillPrice: 485,
locfPrice: 485
}
]