Definición
Nuevo en la versión 5.1.
Devuelve los segundos de un timestamp como un long.
$tsSecond sintaxis:
{ $tsSecond: <expression> }
La expresión debe resolverse en una marca temporal.
Comportamiento
$tsSecond Devuelve:
Nullsi la expresión evaluada esnullo hace referencia a un campo que falta.Un error si la expresión ingresada no se evalúa como una marca de tiempo.
Ejemplos
Obtener el número de segundos de un campo de marca de tiempo
Cree una colección de stockSales que contenga ventas en bolsa financiera de acciones de la empresa:
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) } ] )
En el constructor de marca de tiempo, el:
El primer valor es el número de segundos después de la Unix epoch.
El segundo valor es el ordinal incremental. Cuando varios eventos ocurren en el mismo segundo, el ordinal incremental identifica de manera única cada evento.
El siguiente ejemplo utiliza $tsSecond en una $project etapa del pipeline para devolver los segundos del campo saleTimestamp de las ventas de acciones:
db.stockSales.aggregate( [ { $project: { _id: 0, saleTimestamp: 1, saleSeconds: { $tsSecond: "$saleTimestamp" } } } ] )
Ejemplo de salida:
{ 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") }
Usa $tsSecond en un cursor de Change Stream para supervisar los Cambios en la colección
El ejemplo de esta sección usa $tsSecond en un cursor de flujo de cambios para monitorear los cambios en una colección.
Cree un cursor de flujo de cambios en una colección llamada cakeSales que verá más adelante en esta sección:
cakeSalesCursor = db.cakeSales.watch( [ { $addFields: { clusterTimeSeconds: { $tsSecond: "$clusterTime" } } } ] )
En el ejemplo, el:
El
db.collection.watch()crea un cursor de flujo de cambios para lacakeSalescolección y almacena el cursor encakeSalesCursor.$addFieldsetapa añade un campo llamadoclusterTimeSecondsacakeSalesCursor.$clusterTimees la marca de tiempo de la entrada de oplog para el cambio en la coleccióncakeSales. Consulte Respuesta del Comando.$tsSeconddevuelve los segundos de$clusterTime, que se almacenan enclusterTimeSeconds.
Crea una colección de cakeSales que incluya ventas de pasteles en el estado de California (CA) y 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 } ] )
Para supervisar los cambios en la colección de cakeSales, utiliza cakeSalesCursor. Por ejemplo, para obtener el siguiente documento de cakeSalesCursor, utiliza el método next():
cakeSalesCursor.next()
El siguiente ejemplo de resultado muestra los detalles de insert para el primer documento añadido a la colección cakeSales. El campo clusterTimeSeconds contiene los segundos del campo 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