Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$tsIncrement (operador de expresión)

$tsIncrement

Nuevo en la versión 5.1.

Devuelve el ordinal incremental de un timestamp 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 de tiempo.

Tip

$tsIncrement Devuelve:

Cree una colección stockSales que contenga las ventas del mercado financiero 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 siguiente ejemplo utiliza $tsIncrement en una etapa para devolver el ordinal incremental $project del saleTimestamp campo de ventas de stock:

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 cakeSales cambios de la colección,cakeSalesCursor utilice. Por ejemplo, para obtener el siguiente documento cakeSalesCursor de, utilice el next() método:

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.

Volver

$toUUID

En esta página