Create Timeseries
The document
as specified will be inserted into the specified database
and timeseries collection
. The BSON ObjectId property/field (_id
) may be omitted in the document. The response will include the server generated _id
for the inserted document if using acknowledged writes. No version history is created for timeseries data.
Data model that represents the payload to be submitted to the service for creating documents. Two structures are defined: `Create` that owns the document payload, and `CreateWithReference` that references instances that are owned by calling code.
//
// CreateTimeseriesd by Rakesh on 13/12/2024.
//
#pragma once
#include "action.hpp"
#include "../../options/insert.hpp"
#include <bsoncxx/builder/stream/document.hpp>
namespace spt::mongoservice::api::model::request
{
template <util::Visitable Document>
struct CreateTimeseries
{
CreateTimeseries() = default;
~CreateTimeseries() = default;
CreateTimeseries(CreateTimeseries&&) = default;
CreateTimeseries& operator=(CreateTimeseries&&) = default;
CreateTimeseries(const CreateTimeseries&) = delete;
CreateTimeseries& operator=(const CreateTimeseries&) = delete;
BEGIN_VISITABLES(CreateTimeseries);
VISITABLE(Document, document);
VISITABLE(std::optional<options::Insert>, options);
std::string database;
std::string collection;
std::string application;
std::string correlationId;
Action action{Action::createTimeseries};
bool skipMetric{false};
END_VISITABLES;
};
}
Data model that represents the payload that the service responds with when creating a document.
//
// Created by Rakesh on 17/12/2024.
//
#pragma once
#if defined __has_include
#if __has_include("../../../common/visit_struct/visit_struct_intrusive.hpp")
#include "../../../common/visit_struct/visit_struct_intrusive.hpp"
#include "../../../common/util/serialise.hpp"
#else
#include <mongo-service/common/visit_struct/visit_struct_intrusive.hpp>
#include <mongo-service/common/util/serialise.hpp>
#endif
#endif
#include <optional>
#include <bsoncxx/oid.hpp>
namespace spt::mongoservice::api::model::response
{
struct Create
{
explicit Create( bsoncxx::document::view document ) { util::unmarshall( *this, document ); }
Create() = default;
~Create() = default;
Create(Create&&) = default;
Create& operator=(Create&&) = default;
Create(const Create&) = delete;
Create& operator=(const Create&) = delete;
BEGIN_VISITABLES(Create);
VISITABLE(std::string, database);
VISITABLE(std::string, collection);
VISITABLE(std::optional<bsoncxx::oid>, id);
VISITABLE(std::optional<bsoncxx::oid>, entity);
VISITABLE(std::optional<bool>, skipVersion);
END_VISITABLES;
};
}
Sample code illustrating the create action.
#include <mongo-service/api/repository/repository.hpp>
namespace example
{
struct Document
{
struct Tags
{
Tags() = default;
~Tags() = default;
Tags(Tags&&) = default;
Tags& operator=(Tags&&) = default;
bool operator==(const Tags&) const = default;
Tags(const Tags&) = delete;
Tags& operator=(const Tags&) = delete;
BEGIN_VISITABLES(Tags);
VISITABLE(std::string, str);
VISITABLE_DIRECT_INIT(int64_t, integer, {5});
VISITABLE_DIRECT_INIT(double, floating, {10.345});
VISITABLE_DIRECT_INIT(bool, boolean, {true});
END_VISITABLES;
};
Document() = default;
~Document() = default;
Document(Document&&) = default;
Document& operator=(Document&&) = default;
bool operator==(const Document&) const = default;
Document(const Document&) = delete;
Document& operator=(const Document&) = delete;
BEGIN_VISITABLES(Document);
VISITABLE(Tags, tags);
VISITABLE(bsoncxx::oid, id);
VISITABLE_DIRECT_INIT(spt::util::DateTimeMs, timestamp, {std::chrono::duration_cast<std::chrono::milliseconds>( std::chrono::system_clock::now().time_since_epoch() )});
END_VISITABLES;
};
}
int main()
{
using namespace spt::mongoservice::api;
auto insert = model::request::CreateTimeseries<example::Document>{};
insert.database = "test";
insert.collection = "ts-test";
insert.document.tags.str = "value";
auto result = repository::create( insert );
if ( !result.has_value() )
{
LOG_WARN << "Error creating timeseries document. " << magic_enum::enum_name( result.error().cause ) << ". " << result.error().message;
}
}
Last modified: 18 February 2025