Definition
$tsSecond
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