文档菜单
文档首页
/
MongoDB 手册
/ / /

$tsSecond(聚合)

在本页

  • 定义
  • 行为
  • 示例
$tsSecond

版本5.1.

从时间戳返回秒作为时间戳作为一个长整型

$tsSecond 语法

{ $tsSecond: <expression> }

表达式必须解析为时间戳

提示

另请参阅

$tsSecond 返回

  • null,如果输入 表达式 评估为 null 或引用了一个缺失的字段。

  • 如果输入 表达式 评估为一个不是 时间戳 的值,则产生错误。

创建一个包含公司股票金融市场销售的 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) }
] )

时间戳 构造函数中,

  • 第一个值是自Unix纪元以来的秒数。

  • 第二个值是递增序号。当同一秒内发生多个事件时,递增序号可以唯一标识每个事件。

以下示例使用$tsSecond$project管道阶段中返回库存销售saleTimestamp字段的秒数。

db.stockSales.aggregate( [
{
$project:
{
_id: 0, saleTimestamp: 1, saleSeconds: { $tsSecond: "$saleTimestamp" }
}
}
] )

示例输出

{
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")
}

本节中的示例使用$tsSecond在一个更改流游标中监控集合更改。

在名为cakeSales的集合上创建一个更改流游标,您将在本节后面看到它。

cakeSalesCursor = db.cakeSales.watch( [
{
$addFields: {
clusterTimeSeconds: { $tsSecond: "$clusterTime" }
}
}
] )

在示例中,

创建一个包含加利福尼亚州(CA)和华盛顿州(WA)糕点销售的 cakeSales 集合。

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 }
] )

要监视 cakeSales 集合的变化,使用 cakeSalesCursor。例如,要从 cakeSalesCursor 获取下一个文档,请使用 next() 方法

cakeSalesCursor.next()

以下示例输出显示了添加到 cakeSales 集合的第一个文档的 insert 详细信息。 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

返回

tsIncrement