Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
SDK de Dispositivo Atlas

Quick Start - C++ SDK

Esta guía de inicio rápido muestra cómo usar Realm con el SDK de C++ de Realm. Antes de comenzar, asegúrese de tener instalado el SDK de C++.

Haga que el SDK de C++ de Realm esté disponible en su código incluyendo el cpprealm/sdk.hpp encabezado en la unidad de traducción donde desea utilizarlo:

#include <cpprealm/sdk.hpp>

Para un dominio exclusivamente local, puede definir su modelo de objetos directamente en el código. En esta guía rápida, puede eliminar ownerId a menos que desee agregar la sincronización de dispositivos opcional.

namespace realm {
struct Todo {
realm::primary_key<realm::object_id> _id{realm::object_id::generate()};
std::string name;
std::string status;
// The ownerId property stores the user.identifier() of a
// logged-in user. Omit this property for the non-sync example.
std::string ownerId;
};
REALM_SCHEMA(Todo, _id, name, status, ownerId);
} // namespace realm

Cuando abres un reino, debes especificar un db_config. Opcionalmente, puede abrir un dominio en una ruta específica o proporcionar un sync_config para abrir un dominio sincronizado.

auto config = realm::db_config();
auto realm = realm::db(std::move(config));

For more information, see: Configure and Open a Realm.

Once you have opened a realm, you can modify it and its objects in a write transaction block.

Para instanciar un nuevo objeto Todo y agregarlo al realm en un bloque de escritura:

auto todo = realm::Todo{.name = "Create my first todo item",
.status = "In Progress"};
realm.write([&] { realm.add(std::move(todo)); });

Puede recuperar una colección de resultados en vivo de todas las tareas pendientes en el ámbito:

auto todos = realm.objects<realm::Todo>();

You can also filter that collection using where:

auto todosInProgress = todos.where(
[](auto const& todo) { return todo.status == "In Progress"; });

To modify a todo, update its properties in a write transaction block:

auto todoToUpdate = todosInProgress[0];
realm.write([&] { todoToUpdate.status = "Complete"; });

Por último, puedes borrar un todo:

realm.write([&] { realm.remove(specificTodo); });

Puede observar un objeto para cambios con el método observe.

auto token = specificTodo.observe([&](auto&& change) {
try {
if (change.error) {
rethrow_exception(change.error);
}
if (change.is_deleted) {
std::cout << "The object was deleted.\n";
} else {
for (auto& propertyChange : change.property_changes) {
std::cout << "The object's " << propertyChange.name
<< " property has changed.\n";
}
}
} catch (std::exception const& e) {
std::cerr << "Error: " << e.what() << "\n";
}
});

Para cerrar un dominio y liberar todos los recursos subyacentes, llame a db::close(). Cerrar la base de datos invalida los objetos restantes.

realm.close();

Si desea sincronizar datos de Realm entre dispositivos, puede configurar una aplicación de Atlas App Services y habilitar Device Sync. Para obtener más información sobre lo que puede hacer con aplicación Services, consulte: aplicación Services - C++ SDK.

Before you can sync Realm data, you must:

To use App Services features such as authentication and sync, access your App Services App using your App ID. You can find your App ID in the App Services UI.

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);

En esta guía de inicio rápido, usará la autenticación anónima para iniciar sesión sin que los usuarios proporcionen información de identificación. Tras autenticar al usuario, podrá abrir un dominio para él.

auto user = app.login(realm::App::credentials::anonymous()).get();

El SDK de Realm para C++ ofrece muchas maneras adicionales de autenticar, registrar y vincular usuarios. Para conocer otros proveedores de autenticación, consulte: Autenticar usuarios - SDK de C++.

Una vez que haya habilitado la Sincronización de dispositivos y autenticado a un usuario, puede crear un objeto sync_configuration y abrir el dominio. A continuación, puede agregar una suscripción de Sincronización flexible que determine qué datos puede leer y escribir el dominio.

auto syncConfig = user.flexible_sync_configuration();
auto realm = realm::db(syncConfig);
// For this example, get the userId for the Flexible Sync query
auto userId = user.identifier();
auto subscriptions = realm.subscriptions();
auto updateSubscriptionSuccess =
subscriptions
.update([&](realm::mutable_sync_subscription_set& subs) {
subs.add<realm::Todo>("todos", [&userId](auto& obj) {
// For this example, get only Todo items where the ownerId
// property value is equal to the userId of the logged-in user.
return obj.ownerId == userId;
});
})
.get();

The syntax to read, write, and watch for changes on a synced realm is identical to the syntax for non-synced realms above.

La única diferencia es que este ejemplo almacena el user.identifier() del usuario conectado en la propiedad ownerId del elemento Todo. Esto nos permite consultar solo las tareas pendientes del usuario en la suscripción y establecer los permisos de sincronización en Users can only read and write their own data.

Para obtener más información sobre los permisos de sincronización, consulte Permisos basados en roles.

auto todo = realm::Todo{.name = "Create a Sync todo item",
.status = "In Progress",
.ownerId = userId};
realm.write([&] { realm.add(std::move(todo)); });
auto todos = realm.objects<realm::Todo>();

While you work with local data, a background thread efficiently integrates, uploads, and downloads changesets.

Every write transaction for a subscription set has a performance cost. If you need to make multiple updates to a Realm object during a session, consider keeping edited objects in memory until all changes are complete. This improves sync performance by only writing the complete and updated object to your realm instead of every change.

Next

Bienvenido a la Docs de Atlas Device SDK

En esta página