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

$tsIncrement (operador de expresión)

$tsIncrement

Novedad 5.1 en la versión.:

Devuelve el ordinal incremental de una marca de tiempo como un long.

Cuando varios eventos ocurren en el mismo segundo, el ordinal incremental identifica de forma única cada evento.

$tsIncrement sintaxis:

{ $tsIncrement: <expression> }

La expresión debe resolverse en una marca temporal.

$tsIncrement Devuelve:

Cree una colección de stockSales que contenga ventas en bolsa financiera de acciones de la empresa:

db.stockSales.insertMany( [
{ _id: 0, symbol: "MDB", saleTimestamp: Timestamp(1622731060, 1) },
{ _id: 1, symbol: "MDB", saleTimestamp: Timestamp(1622731060, 2) },
{ _id: 2, symbol: "MSFT", saleTimestamp: Timestamp(1714124193, 1) },
{ _id: 3, symbol: "MSFT", saleTimestamp: Timestamp(1714124193, 2) },
{ _id: 4, symbol: "MSFT", saleTimestamp: Timestamp(1714124193, 3) }
] )

En el constructor de marca de tiempo, el:

  • El primer valor es el número de segundos después de la Unix epoch.

  • El segundo valor es el ordinal incremental. Cuando varios eventos ocurren en el mismo segundo, el ordinal incremental identifica de manera única cada evento.

El siguiente ejemplo utiliza $tsIncrement en una etapa $project para devolver el ordinal incremental del campo de ventas de acciones saleTimestamp:

db.stockSales.aggregate( [
{
$project:
{
_id: 0, saleTimestamp: 1, saleIncrement: { $tsIncrement: "$saleTimestamp" }
}
}
] )

En el ejemplo, $project solo incluye los campos saleTimestamp y saleIncrement como se muestra en la siguiente salida:

{
saleTimestamp: Timestamp({ t: 1622731060, i: 1 }),
saleIncrement: Long("1")
},
{
saleTimestamp: Timestamp({ t: 1622731060, i: 2 }),
saleIncrement: Long("2")
},
{
saleTimestamp: Timestamp({ t: 1714124193, i: 1 }),
saleIncrement: Long("1")
},
{
saleTimestamp: Timestamp({ t: 1714124193, i: 2 }),
saleIncrement: Long("2")
},
{
saleTimestamp: Timestamp({ t: 1714124193, i: 3 }),
saleIncrement: Long("3")
}

El ejemplo de esta sección utiliza $tsIncrement en un cursor de flujo de cambios para devolver cada segundo cambio realizado en una colección en el mismo segundo de tiempo.

Cree un cursor de flujo de cambios en una colección llamada cakeSales que verá más adelante en esta sección:

cakeSalesCursor = db.cakeSales.watch( [
{
$match: {
$expr: {
$eq: [
{ $mod: [ { $tsIncrement: "$clusterTime" } , 2 ] },
0
]
}
}
}
] )

En el ejemplo, el:

Crea una colección de cakeSales que incluya ventas de pasteles en el estado de California (CA) y Washington (WA):

db.cakeSales.insertMany( [
{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120 },
{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140 },
{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145 },
{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104 },
{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162 },
{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134 }
] )

Para supervisar los cambios en la colección de cakeSales, utiliza cakeSalesCursor. Por ejemplo, para obtener el siguiente documento de cakeSalesCursor, utiliza el método next():

cakeSalesCursor.next()

Dependiendo del segundo en el que se agregaron los documentos a cakeSales, la salida de cakeSalesCursor.next() varía. Por ejemplo, la adición de documentos podría abarcar más de un segundo.

La siguiente salida de ejemplo cakeSalesCursor.next() muestra los insert detalles del primer documento añadido a la colección cakeSales. Observa que el ordinal incremental i es 2 en el campo clusterTime.

_id: {
_data: '82613A4F25000000022B022C0100296E5A100454C5BFAF538C47AB950614F43889BE00461E5F696400290004'
},
operationType: 'insert',
clusterTime: Timestamp({ t: 1631211301, i: 2 }),
fullDocument: {
_id: 0,
type: 'chocolate',
orderDate: ISODate("2020-05-18T14:10:30.000Z"),
state: 'CA',
price: 13,
quantity: 120
},
ns: { db: 'test', coll: 'cakeSales' },
documentKey: { _id: 0 }

Ejecutar cakeSalesCursor.next() nuevamente devuelve el documento cakeSales para el cual el número ordinal incremental clusterTime i es 4, omitiendo el documento donde i es 3.