$tsSecond (agregação)
Nesta página
Definição
Novidades na versão 5.1.
Retorna os segundos de um carimbo dedata/hora como long
.
$tsSecond
sintaxe:
{ $tsSecond: <expression> }
A expressão deve ser resolvida para um registro de data e hora.
Comportamento
$tsSecond
Devoluções:
Null
se a expressão de entrada avaliar paranull
ou se referir a um campo ausente.Um erro se a expressão de entrada não for avaliada como um carimbo de data/hora.
Exemplos
Obter o número de segundos de um campo de carimbo de data/hora
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 $tsSecond
em um estágio de pipeline $project
para retornar os segundos do campo de vendas de estoque saleTimestamp
:
db.stockSales.aggregate( [ { $project: { _id: 0, saleTimestamp: 1, saleSeconds: { $tsSecond: "$saleTimestamp" } } } ] )
Saída de exemplo:
{ saleTimestamp: Timestamp({ t: 1622731060, i: 1 }), saleSeconds: Long("1622731060") }, { saleTimestamp: Timestamp({ t: 1622731060, i: 2 }), saleSeconds: Long("1622731060") }, { saleTimestamp: Timestamp({ t: 1714124193, i: 1 }), saleSeconds: Long("1714124193") }, { saleTimestamp: Timestamp({ t: 1714124193, i: 2 }), saleSeconds: Long("1714124193") }, { saleTimestamp: Timestamp({ t: 1714124193, i: 3 }), saleSeconds: Long("1714124193") }
Use $tsSecond
em um cursor de fluxo de alterações para monitorar alterações de coleção
O exemplo nesta seção usa $tsSecond
em um cursor de change stream para monitorar as alterações em uma coleção.
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( [ { $addFields: { clusterTimeSeconds: { $tsSecond: "$clusterTime" } } } ] )
No exemplo, o:
O método
db.collection.watch()
cria um cursor de fluxo de alterações para a coleçãocakeSales
e armazena o cursor emcakeSalesCursor
.O estágio
$addFields
adiciona um campo chamadoclusterTimeSeconds
acakeSalesCursor
.$clusterTime
é o oplog de data/hora da oplog para a alteração da collectioncakeSales
. Consulte Resposta do comando.$tsSecond
retornará os segundos de$clusterTime
, que são armazenados emclusterTimeSeconds
.
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()
A saída de exemplo a seguir mostra os detalhes insert
do primeiro documento adicionado à coleção cakeSales
. O campo clusterTimeSeconds
contém os segundos do campo clusterTime
.
_id: { _data: '82613A4A51000000032B022C0100296E5A100495189B4131584C56AC8BA9D540799F23461E5F696400290004' }, operationType: 'insert', clusterTime: Timestamp({ t: 1631210065, i: 3 }), 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 }, clusterTimeSeconds: 1631210065