【问题标题】:MongoDB Mapping Referenced Relationships In JavaJava中的MongoDB映射引用关系
【发布时间】:2015-04-21 22:38:47
【问题描述】:

如果我有两个集合:用户和事件。一个用户可以有很多事件...

Users
{

   Username: "Mark",
   Password: "1234567"
}

Events
{
   EventTitle: "Skiing",
   EventDate: "20/2/2015"
}

我需要根据用户在 java 中的用户名将事件与用户相关联。所以我所做的是搜索用户....

BasicDBObject query = new BasicDBObject("Username", "Mark");
DBCursor cursor = table.find(query);

我根据它的标题搜索了这个事件......

BasicDBObject query = new BasicDBObject("EventTitle", "Skiing");
DBCursor cursor = table.find(query);

我只需要知道如何将该事件与用户相关联,假设搜索查询只会产生一个事件和一个用户。网上的例子太少了。

【问题讨论】:

标签: java mongodb mongodb-query mongodb-java


【解决方案1】:

您可能想要创建另一个要存储此类关系的集合,首先向两个集合添加一个字段“id”(这始终是一个好习惯),然后您可以通过这些 ID 将一个集合相互关联。

Users
{
   id: "001",
   Username: "Mark",
   Password: "1234567"
}

Events
{
   id: "001",
   EventTitle: "Skiing",
   EventDate: "20/2/2015"
}

Users_Events
{
   user_id: "001",
   event_id: "001"
}

【讨论】:

    【解决方案2】:

    使用 NoSQL 数据库时,不要再考虑 SQL。停止规范化数据。不要试图使数据具有关系。复制数据完全没问题。有时需要。

    例如,您可以将UsernameUser ObjectId 或两者都放入数组中的Event 文档中,或者为每个User/Event 组合创建一个Event 文档。

    总而言之,这实际上取决于您将运行哪些其他查询。

    【讨论】:

    • 这个答案没用。您可能需要将图形存储在 nosql 数据库中,而您最不想做的事情是为一个被多个节点引用的节点创建多个节点。您希望节点成为内存中的引用,而不是引用它的每个节点的序列化值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2015-12-14
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多