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:
Nullse a expressão de entrada avaliar paranullou 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çãocakeSalese armazena o cursor emcakeSalesCursor.O estágio
$addFieldsadiciona um campo chamadoclusterTimeSecondsacakeSalesCursor.$clusterTimeé o oplog de data/hora da oplog para a alteração da collectioncakeSales. Consulte Resposta do comando.$tsSecondretornará 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