Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ / /

Objetos incorporados - SDK do Node.js

Nesta página

  • Visão geral
  • Realm Object Models
  • JSON schema
  • Ler e escrever objetos incorporados
  • Criar um Objeto Embarcado
  • Atualizar uma propriedade de objeto incorporado
  • Substituir um Objeto Integrado
  • Consultar uma Coleção sobre Propriedades de Objetos Embarcados
  • Excluir um objeto incorporado

Um objeto embarcado é um tipo especial de objeto de Realm que modela dados complexos a respeito de um objeto específico. Os objetos incorporados são semelhantes às relações, mas fornecem restrições adicionais e mapeiam mais naturalmente o modelo de documentodesnormalizado doMongoDB.

O Realm impõe restrições de propriedade exclusivas que tratam cada objeto embarcado como dados aninhados dentro de um único objeto pai específico. Um objeto incorporado herda o ciclo de vida de seu objeto pai e não pode existir como um objeto Realm independente. Isso significa que os objetos embarcados não podem ter uma chave primária e que o Realm exclui automaticamente os objetos embarcados se o objeto pai for excluído.

Dica

Os tipos de objetos embarcados são reutilizáveis e componíveis

Você pode usar o mesmo tipo de objeto incorporado em vários tipos de objeto pai e pode incorporar objetos dentro de outros objetos incorporados. Você pode até referenciar recursivamente um tipo de objeto incorporado como uma propriedade opcional em sua própria definição.

Observação

O Realm usa exclusões em cascata para objetos embarcados

Quando você exclui um objeto de Realm, o Realm exclui automaticamente quaisquer objetos incorporados referenciados por esse objeto. Qualquer objeto que seu aplicativo precise manter após a exclusão de seu objeto pai deve usar relacionamentos.

Para definir um objeto incorporado, defina embedded como true. Você pode referenciar um tipo de objeto incorporado a partir de tipos de objeto principal da mesma maneira que definiria uma relação:

Importante

Objetos embarcados não podem ter uma chave primária.

const AddressSchema = {
name: "Address",
embedded: true, // default: false
properties: {
street: "string?",
city: "string?",
country: "string?",
postalCode: "string?",
},
};
const ContactSchema = {
name: "Contact",
primaryKey: "_id",
properties: {
_id: "objectId",
name: "string",
address: "Address", // Embed a single object
},
};
const BusinessSchema = {
name: "Business",
primaryKey: "_id",
properties: {
_id: "objectId",
name: "string",
addresses: { type: "list", objectType: "Address" }, // Embed an array of objects
},
};

Objetos incorporados são mapeados para documentos incorporados no esquema do tipo principal. Este comportamento difere dos objetos regulares do Realm, que mapeiam para sua própria coleção MongoDB.

{
"title": "Contact",
"bsonType": "object",
"required": ["_id"],
"properties": {
"_id": { "bsonType": "objectId" },
"name": { "bsonType": "string" },
"address": {
"title": "Address",
"bsonType": "object",
"properties": {
"street": { "bsonType": "string" },
"city": { "bsonType": "string" },
"country": { "bsonType": "string" },
"postalCode": { "bsonType": "string" }
}
}
}
}
{
"title": "Business",
"bsonType": "object",
"required": ["_id", "name"],
"properties": {
"_id": { "bsonType": "objectId" },
"name": { "bsonType": "string" },
"addresses": {
"bsonType": "array",
"items": {
"title": "Address",
"bsonType": "object",
"properties": {
"street": { "bsonType": "string" },
"city": { "bsonType": "string" },
"country": { "bsonType": "string" },
"postalCode": { "bsonType": "string" }
}
}
}
}
}

Para criar um objeto embarcado, atribua uma instância do objeto embarcado à propriedade de um objeto pai:

// create an embedded address object
const sydneyOrthodontics = {
street: "42 Wallaby Way",
city: "Sydney",
country: "Australia",
postalCode: "2774",
};
realm.write(() => {
// create a contact object
realm.create("Contact", {
_id: new BSON.ObjectId(),
name: "Philip Sherman",
address: sydneyOrthodontics, // embed the address in the contact object
});
});

Para atualizar uma propriedade em um objeto integrado, modifique a propriedade em uma transação de escrita:

// Find the contact with the address you want to update
const harryPotter = realm
.objects("Contact")
.filtered("name = 'Harry Potter'")[0];
// modify the property of the embedded object in a write transaction
realm.write(() => {
// update the embedded object directly through the contact
harryPotter.address.street = "1 Hogwarts Ave";
});

Para substituir um objeto integrado, reatribua a propriedade do objeto integrado de uma parte a uma nova instância em uma transação de escrita:

// create a new address
const harryNewAddress = {
street: "12 Grimmauld Place",
city: "London",
country: "UK",
postalCode: "E1 7AA",
};
realm.write(() => {
// overwrite the embedded object with the new address within a write transaction
harryPotter.address = harryNewAddress;
});

Use a notação de ponto para filtrar ou classificar uma coleção de objetos com base em um valor de propriedade de objeto incorporado:

Observação

Não é possível consultar objetos incorporados diretamente. Em vez disso, acesse objetos incorporados por meio de uma consulta para o tipo de objeto pai.

const philipShermanAddress = realm
.objects("Contact")
.filtered("name = 'Philip Sherman'")[0].address.street;
console.log(`Philip Sherman's address is ${philipShermanAddress}`);

O Realm usa exclusões em cascata para objetos embarcados. Para excluir um objeto incorporado, exclua o principal do objeto incorporado.

realm.write(() => {
// Deleting the contact will delete the embedded address of that contact
realm.delete(
realm.objects("Contact").filtered("name = 'Philip Sherman'")
);
});

Voltar

UUID

Próximo

Dados geoespaciais