$tsSecond (aggregation)
On this page本页内容
Definition定义
$tsSecond
New in version 5.1. 5.1版新增。
Returns the seconds from a timestamp as a 将timestamp中的秒以long
.long
的形式返回。
$tsSecond
syntax:语法:
{ $tsSecond: <expression> }
The expression must resolve to a timestamp.表达式必须解析为时间戳。
See also: 另请参阅:
Behavior行为
$tsSecond
returns:返回:
如果输入表达式的计算结果为Null
if the input expression evaluates tonull
or refers to a field that is missing.Null
或引用了缺失的字段,则为Null
。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:stockSales
集合:
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:在timestamp构造函数中
First value is the number of seconds after the Unix epoch.第一个值是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:$project
管道阶段中使用$tsSecond
来返回股票销售saleTimestamp
字段中的秒数:
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在更改流游标中使用$tsSecond
监视集合更改
$tsSecond
in a Change Stream Cursor to Monitor Collection ChangesThe example in this section uses 本节中的示例在更改流游标中使用$tsSecond
in a change stream cursor to monitor changes to a collection.$tsSecond
来监视对集合的更改。
Create a change stream cursor on a collection named 在名为cakeSales
that you will see later in this section:cakeSales
的集合上创建一个变更流游标,您将在本节稍后看到:
cakeSalesCursor = db.cakeSales.watch( [
{
$addFields: {
clusterTimeSeconds: { $tsSecond: "$clusterTime" }
}
}
] )
In the example, the:在该示例中
db.collection.watch()
method creates a change stream cursor for the方法为cakeSales
collection and stores the cursor incakeSalesCursor
.cakeSaless
集合创建一个变更流游标,并将该游标存储在cakeSalesCursor
中。$addFields
stage adds a field namedclusterTimeSeconds
tocakeSalesCursor
.$addFields
阶段将一个名为clusterTimeSeconds
的字段添加到cakeSalesCursor
中。$clusterTime
is the timestamp from the oplog entry for thecakeSales
collection change.$clusterTime
是cakeSales
集合更改的oplog条目中的时间戳。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
. cakeSales
集合的更改,请使用cakeSalesCursor
。For example, to obtain the next document from 例如,要从cakeSalesCursor
, use the next()
method:cakeSalesCursor
获取下一个文档,请使用next()
方法:
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.cakeSales
集合的第一个文档的插入详细信息。clusterTimeSeconds字段包含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