How to update stored references in Cosmos Document DB?

Multi tool use
I am very new to document based databases and am using the Cosmos Document DB from Azure in my Springboot application.
I have a data structure like this:
User:
{
"firstname": "Bob",
"password": "asdf",
"roles": [
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
],
"id": "0a9030f1-30f8-4d23-9030-f130f85d23e7",
"email": "email@mail.com",
"username": "admin",
"lastname": "Martin"
}
Role:
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
The user stores all roles that he is assigned to. In this case, the user stores the role ROLE_ADMIN that contains several rights.
If I am now updating the role ROLE_ADMIN, e.g. by adding a right, and storing this again in the database via documentClient.replaceDocument(docLink, role, null);
the reference of this entity that is stored in the user is not updated. User still contains a role with two rights instead of three then.
Do I have to update all references manually or am I missing something?
spring-boot reference

add a comment |
I am very new to document based databases and am using the Cosmos Document DB from Azure in my Springboot application.
I have a data structure like this:
User:
{
"firstname": "Bob",
"password": "asdf",
"roles": [
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
],
"id": "0a9030f1-30f8-4d23-9030-f130f85d23e7",
"email": "email@mail.com",
"username": "admin",
"lastname": "Martin"
}
Role:
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
The user stores all roles that he is assigned to. In this case, the user stores the role ROLE_ADMIN that contains several rights.
If I am now updating the role ROLE_ADMIN, e.g. by adding a right, and storing this again in the database via documentClient.replaceDocument(docLink, role, null);
the reference of this entity that is stored in the user is not updated. User still contains a role with two rights instead of three then.
Do I have to update all references manually or am I missing something?
spring-boot reference

add a comment |
I am very new to document based databases and am using the Cosmos Document DB from Azure in my Springboot application.
I have a data structure like this:
User:
{
"firstname": "Bob",
"password": "asdf",
"roles": [
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
],
"id": "0a9030f1-30f8-4d23-9030-f130f85d23e7",
"email": "email@mail.com",
"username": "admin",
"lastname": "Martin"
}
Role:
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
The user stores all roles that he is assigned to. In this case, the user stores the role ROLE_ADMIN that contains several rights.
If I am now updating the role ROLE_ADMIN, e.g. by adding a right, and storing this again in the database via documentClient.replaceDocument(docLink, role, null);
the reference of this entity that is stored in the user is not updated. User still contains a role with two rights instead of three then.
Do I have to update all references manually or am I missing something?
spring-boot reference

I am very new to document based databases and am using the Cosmos Document DB from Azure in my Springboot application.
I have a data structure like this:
User:
{
"firstname": "Bob",
"password": "asdf",
"roles": [
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
],
"id": "0a9030f1-30f8-4d23-9030-f130f85d23e7",
"email": "email@mail.com",
"username": "admin",
"lastname": "Martin"
}
Role:
{
"rights": [
{
"name": "RIGHT_READ"
},
{
"name": "RIGHT_WRITE"
}
],
"name": "ROLE_ADMIN",
"id": "0d5299e0-836c-494d-9299-e0836c294d55"
}
The user stores all roles that he is assigned to. In this case, the user stores the role ROLE_ADMIN that contains several rights.
If I am now updating the role ROLE_ADMIN, e.g. by adding a right, and storing this again in the database via documentClient.replaceDocument(docLink, role, null);
the reference of this entity that is stored in the user is not updated. User still contains a role with two rights instead of three then.
Do I have to update all references manually or am I missing something?
spring-boot reference

spring-boot reference

asked Jan 2 at 15:49
FayreFayre
3629
3629
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
CosmosDB is a non-relational database. If you are using it as a relational database then you have to do all the cascading updates manually, as CosmosDB itself doesn't know that you are referencing another document from the database. Each document is agnostic from the other.
Based on this example you also have a data integrity issue. You are storing the rights in both the role object but also the user object. What you should do instead is store the rights in the role object and then just use the role id in the user object and query for the rights based on the role id. That that way you only update the roles.
Ok thank you very much, guess I have a better understanding now on how these things work :)
– Fayre
Jan 3 at 13:20
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54009268%2fhow-to-update-stored-references-in-cosmos-document-db%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
CosmosDB is a non-relational database. If you are using it as a relational database then you have to do all the cascading updates manually, as CosmosDB itself doesn't know that you are referencing another document from the database. Each document is agnostic from the other.
Based on this example you also have a data integrity issue. You are storing the rights in both the role object but also the user object. What you should do instead is store the rights in the role object and then just use the role id in the user object and query for the rights based on the role id. That that way you only update the roles.
Ok thank you very much, guess I have a better understanding now on how these things work :)
– Fayre
Jan 3 at 13:20
add a comment |
CosmosDB is a non-relational database. If you are using it as a relational database then you have to do all the cascading updates manually, as CosmosDB itself doesn't know that you are referencing another document from the database. Each document is agnostic from the other.
Based on this example you also have a data integrity issue. You are storing the rights in both the role object but also the user object. What you should do instead is store the rights in the role object and then just use the role id in the user object and query for the rights based on the role id. That that way you only update the roles.
Ok thank you very much, guess I have a better understanding now on how these things work :)
– Fayre
Jan 3 at 13:20
add a comment |
CosmosDB is a non-relational database. If you are using it as a relational database then you have to do all the cascading updates manually, as CosmosDB itself doesn't know that you are referencing another document from the database. Each document is agnostic from the other.
Based on this example you also have a data integrity issue. You are storing the rights in both the role object but also the user object. What you should do instead is store the rights in the role object and then just use the role id in the user object and query for the rights based on the role id. That that way you only update the roles.
CosmosDB is a non-relational database. If you are using it as a relational database then you have to do all the cascading updates manually, as CosmosDB itself doesn't know that you are referencing another document from the database. Each document is agnostic from the other.
Based on this example you also have a data integrity issue. You are storing the rights in both the role object but also the user object. What you should do instead is store the rights in the role object and then just use the role id in the user object and query for the rights based on the role id. That that way you only update the roles.
answered Jan 2 at 19:57


Nick ChapsasNick Chapsas
3,1511516
3,1511516
Ok thank you very much, guess I have a better understanding now on how these things work :)
– Fayre
Jan 3 at 13:20
add a comment |
Ok thank you very much, guess I have a better understanding now on how these things work :)
– Fayre
Jan 3 at 13:20
Ok thank you very much, guess I have a better understanding now on how these things work :)
– Fayre
Jan 3 at 13:20
Ok thank you very much, guess I have a better understanding now on how these things work :)
– Fayre
Jan 3 at 13:20
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54009268%2fhow-to-update-stored-references-in-cosmos-document-db%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
L8FD NRP9,S8crS73Kr3 OGayR,Rm8hj3 HT,moqGSEnkg GC 5M,8ql,Mmsi,h Wh6t92s VrDnxQtJiUfBnjW3k4o