Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$tsIncrement (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$tsIncrement

Novidades na versão 5.1.

Retorna o ordinal incrementado de um carimbo dedata/hora como long.

Quando vários eventos acontecem no mesmo segundo, o ordinal incrementado identifica exclusivamente cada evento.

$tsIncrement sintaxe:

{ $tsIncrement: <expression> }

A expressão deve ser resolvida para um registro de data e hora.

Dica

Veja também:

$tsIncrement Devoluções:

Crie uma collection stockSales que contenha vendas do mercado financeiro de ações da 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) }
] )

No construtor de registro de data e hora , o:

  • O primeiro valor é o número de segundos após a Unix epoch.

  • O segundo valor é o ordinal incrementado. Quando vários eventos acontecem no mesmo segundo, o ordinal incrementado identifica exclusivamente cada evento.

O exemplo a seguir usa $tsIncrement em um estágio $project para retornar o ordinal incrementado do campo de vendas de ações saleTimestamp :

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

No exemplo, $project inclui apenas os campos saleTimestamp e saleIncrement como mostrado na seguinte saída:

{
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")
}

O exemplo desta seção usa $tsIncrement em um cursor de fluxo de alterações para retornar todas as outras alterações feitas em uma coleção no mesmo segundo de tempo.

Crie um cursor de fluxo de alterações em uma coleção chamada cakeSales que você verá mais adiante nesta seção:

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

No exemplo, o:

Crie uma collection cakeSales que contenha vendas de bolo nos estados da Califórnia (CA) e de 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 monitorar as alterações da coleção cakeSales, utilize cakeSalesCursor. Por exemplo, para obter o próximo documento de cakeSalesCursor, utilize o método next() :

cakeSalesCursor.next()

Dependendo do segundo em que os documentos foram adicionados ao cakeSales, a saída de cakeSalesCursor.next() varia. Por exemplo, as adições de documentos podem abranger mais de um segundo.

O exemplo de saída cakeSalesCursor.next() a seguir mostra os detalhes insert do primeiro documento adicionado à collection cakeSales . Observe que o ordinal incrementado i é 2 no 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 }

Executar cakeSalesCursor.next() novamente retorna o documento cakeSales para o qual o clusterTime ordinal incrementado i é 4, omitindo o documento onde i é 3.

Voltar

$toUpper