mirror of https://github.com/mongodb/mongo
73 lines
2.9 KiB
JavaScript
73 lines
2.9 KiB
JavaScript
// Validates the correctness of the '$tsSecond' and the '$tsIncrement' expression in the aggregation
|
|
// pipeline.
|
|
|
|
load("jstests/libs/sbe_assert_error_override.js"); // Override error-code-checking APIs.
|
|
|
|
(function() {
|
|
"use strict";
|
|
|
|
var testDB = db.getSiblingDB("expression_ts_second_increment");
|
|
|
|
assert.commandWorked(testDB.dropDatabase());
|
|
|
|
var coll = testDB.getCollection("test");
|
|
|
|
assert.commandWorked(
|
|
coll.insert({_id: 0, bsonTime: Timestamp(1622731060, 10), invalidBsonTime: 1622731060}));
|
|
|
|
(function testtsSecond() {
|
|
// Projects the seconds component of the bson timestamp using the 'tsSecond' on the 'bsonTime'
|
|
// field and verifies that the value is correct.
|
|
let result =
|
|
coll.aggregate([{$project: {bsonTime: 1, bsonTimeSeconds: {$tsSecond: "$bsonTime"}}}])
|
|
.toArray();
|
|
assert.eq(result.length, 1);
|
|
assert.eq(result[0].bsonTimeSeconds, result[0].bsonTime.getTime(), result);
|
|
|
|
// Passes a non existing field path to the '$tsSecond' and verifies a null timestamp is
|
|
// returned.
|
|
result = coll.aggregate(
|
|
[{$project: {bsonTime: 1, bsonTimeSeconds: {$tsSecond: "$nonExistingField"}}}])
|
|
.toArray();
|
|
assert.eq(result.length, 1);
|
|
assert.eq(result[0].bsonTimeSeconds, null, result);
|
|
|
|
// Projects the seconds component of bson timestamp using the 'tsSecond' on the
|
|
// 'invalidBsonTime' field and verifies that an expected error code is thrown.
|
|
const nonTimestampError = assert.throws(
|
|
() => coll.aggregate(
|
|
[{$project: {bsonTime: 1, bsonTimeSeconds: {$tsSecond: "$invalidBsonTime"}}}])
|
|
.toArray());
|
|
assert.commandFailedWithCode(nonTimestampError, 5687301);
|
|
})();
|
|
|
|
(function testtsIncrement() {
|
|
// Projects the increment component of bson timestamp using the 'tsSecond' on the 'bsonTime'
|
|
// field and verifies that the value is correct.
|
|
let result =
|
|
coll.aggregate([{$project: {bsonTime: 1, bsonTimeIncrements: {$tsIncrement: "$bsonTime"}}}])
|
|
.toArray();
|
|
assert.eq(result.length, 1);
|
|
assert.eq(result[0].bsonTimeIncrements, result[0].bsonTime.getInc(), result);
|
|
|
|
// Passes a non existing field path to the '$tsIncrement' and verifies a null timestamp is
|
|
// returned.
|
|
result =
|
|
coll.aggregate(
|
|
[{$project: {bsonTime: 1, bsonTimeSeconds: {$tsIncrement: "$nonExistingField"}}}])
|
|
.toArray();
|
|
assert.eq(result.length, 1);
|
|
assert.eq(result[0].bsonTimeSeconds, null, result);
|
|
|
|
// Projects the increment component of bson timestamp using the 'tsIncrement' on the
|
|
// 'invalidBsonTime' field and verifies that an expected error code is thrown.
|
|
const nonTimestampError = assert.throws(
|
|
() =>
|
|
coll.aggregate([{
|
|
$project: {bsonTime: 1, bsonTimeIncrements: {$tsIncrement: "$invalidBsonTime"}}
|
|
}])
|
|
.toArray());
|
|
assert.commandFailedWithCode(nonTimestampError, 5687302);
|
|
})();
|
|
})();
|