$tsSecond (aggregation)
On this page
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.
Behavior
$tsSecond
returns:
Null
if the input expression evaluates tonull
or 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 thecakeSales
collection and stores the cursor incakeSalesCursor
.$addFields
stage adds a field namedclusterTimeSeconds
tocakeSalesCursor
.$clusterTime
is the timestamp from the oplog entry for thecakeSales
collection change. See Command Response.$tsSecond
returns 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