$tsSecond(聚合)
定义
5.1 版本中的新功能。
$tsSecond
事务语法:
{ $tsSecond: <expression> }
行为
$tsSecond
返回:
示例
获取时间戳字段中的秒数
stockSales
创建包含公司股票金融市场销售额的collection集合:
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 纪元之后的秒数。
第二个值是递增序数。 当多个事件在同一秒内发生时,递增序数词唯一标识每个事件。
下面的示例在 $project
管道阶段中使用 $tsSecond
来返回股票销售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
监控集合更改
本节示例在变更流游标 中使用 $tsSecond
来监控集合的变化情况。
在名为 cakeSales
的集合上创建变更流游标,您将在本节后面看到该集合:
cakeSalesCursor = db.cakeSales.watch( [ { $addFields: { clusterTimeSeconds: { $tsSecond: "$clusterTime" } } } ] )
在示例中:
db.collection.watch()
方法会为cakeSales
集合创建一个变更流游标,并将该游标存储在cakeSalesCursor
中。$addFields
阶段将名为clusterTimeSeconds
的字段添加到cakeSalesCursor
。
创建cakeSales
集合,其中包含加利福尼亚州 ( CA
) 和华盛顿州 ( 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 } ] )
要监控 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