$tsSecond (aggregation)
Definition
New in version 5.1.
Returns the seconds from a timestamp as a long.
$tsSecond syntax:
{ $tsSecond: <expression> }
The expression must resolve to a timestamp.
See also:
Behavior
$tsSecond returns:
Nullif the input expression evaluates tonullor refers to a field that is missing.An error if the input expression does not evaluate to a timestamp.
Examples
Obtain the Number of Seconds from a Timestamp Field
Create a stockSales collection that contains company stock financial
market sales:
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) } ] )
In the timestamp constructor, the:
First value is the number of seconds after the Unix epoch.
Second value is the incrementing ordinal. When multiple events happen within the same second, the incrementing ordinal uniquely identifies each event.
The following example uses $tsSecond in a
$project pipeline stage to return the seconds from the
stock sales saleTimestamp field:
db.stockSales.aggregate( [ { $project: { _id: 0, saleTimestamp: 1, saleSeconds: { $tsSecond: "$saleTimestamp" } } } ] )
Example output:
{ 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 in a Change Stream Cursor to Monitor Collection Changes
The example in this section uses $tsSecond in a
change stream cursor to monitor changes to a
collection.
Create a change stream cursor on a collection
named cakeSales that you will see later in this section:
cakeSalesCursor = db.cakeSales.watch( [ { $addFields: { clusterTimeSeconds: { $tsSecond: "$clusterTime" } } } ] )
In the example, the:
db.collection.watch()method creates a change stream cursor for thecakeSalescollection and stores the cursor incakeSalesCursor.$addFieldsstage adds a field namedclusterTimeSecondstocakeSalesCursor.$clusterTimeis the timestamp from the oplog entry for thecakeSalescollection change. See Command Response.$tsSecondreturns the seconds from$clusterTime, which is stored inclusterTimeSeconds.
Create a cakeSales collection that contains cake sales in the states
of California (CA) and 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 } ] )
To monitor the cakeSales collection changes, use
cakeSalesCursor. For example, to obtain the next document from
cakeSalesCursor, use the next() method:
cakeSalesCursor.next()
The following example output shows the insert details for the first
document added to the cakeSales collection. The
clusterTimeSeconds field contains the seconds from the
clusterTime field.
_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