I am trying to implement Spring Boot (User-by-Role) authentication with MongoDB.
I have done so in SQL (such as MySQL) using (User-Role) Many-to-many relationship like this way with annotations.
So how NoSQL databases maintain the relationship? I found this article. According the article, Some database such as Oracle and PostgreSQL have support for array data type. Therefore the roles of a user should be attached/bounded with user object as arrays of Role. I also came across another fantastic article to implement my idea.
Lets have a look on code I have made ...
Role (Java code + Mongo data):
@Document(collection = "roles")
public class Role {
    @Id private String id;
    private String name;
    // getters & setters
}
------------------------------------------------------------------------------------------
{"_id" : ObjectId("58b44a2b2f21472b5457f601"), "name" : "ROLE_ADMIN"}
{"_id" : ObjectId("58b44a3c2f21472b5457f602"), "name" : "ROLE_USER"}
User (Java code + Mongo data): Here, I use reference(s) rather than value(s) of Role (that is ROLE_ADMIN, ROLE_USER) because in future value(s) may change ...
@Document(collection = "users")
public class User {
    @Id private String id;
    private String userName;
    private String password;
    private boolean enabled;
    private Set<Role> roles;
    // getters & setters
}
------------------------------------------------------------------------------------------
{"_id" : ObjectId("58b2fdaf2f214709447f635d"), "userName" : "johir1", "password" : "$2a$04$S8edObuDygOMm0ccPfu2T.CsDgqDygTXW2A8adAsTRmtdmJehURQu", "enabled" : true, "roles" : ["58b44a2b2f21472b5457f601"]}
{"_id" : ObjectId("58b4c21e00ecf75512594fa1"), "userName" : "johir2", "password" : "$2a$04$mgHMTC2FrDUgpU3sNi3d6uRKl0zgRO6bO55aD5R8dCTVZYPtJTPtW", "enabled" : true, "roles" : ["58b44a2b2f21472b5457f601", "58b44a2b2f21472b5457f602"]}
Problems:
I would like to establish relationship between User & Role as the following code snippet
    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
    private Set<User> users;
    ---------------------------------------------------------------
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;
How do I do that while NoSQL database has tables? To be very specific, how NoSQL establish relationship between objects?
 
    