我的MongoDB数据模型是正确的选择吗?

时间:2015-02-04 19:41:37

标签: mongodb

我将使用MongoDB和nodejs构建我的第一个项目(家谱数据库),我问自己,如果我的数据模型是正确的选择:

人员文件(简化):

{
   "_id": ObjectId("123"),
   "modified": ISODate("2015-02-04T16:52:32.601Z"),
   "birth": ISODate("1995-02-04T16:52:32.601Z"),
   "name": "peter"
}, {
   "_id": ObjectId("456"),
   "modified": ISODate("2015-02-04T16:52:32.601Z"),
   "birth": ISODate("1999-02-04T16:52:32.601Z"),
   "name": "uschi"
}

关系文件(简化):

{
   "sourceID": ObjectId("123"),
   "targetID": ObjectId("456"),
   "type": "Married",
   "modified": ISODate("2015-02-04T16:52:32.599Z"),
   "startrelation": ISODate("2001-02-04T16:52:32.601Z"),
   "endrelation": ISODate("2007-02-04T16:52:32.601Z"),
   "_id": ObjectId("54d24e5033bfc203aaaad590") 
}

昨天我尝试检索所有人及其相关人员的列表,并担心我的数据模型,因为我需要大量代码来生成以下结果:

items: [
    {
        "_id": ObjectId("123"),
        "modified": ISODate("2015-02-04T16:52:32.601Z"),
        "birth": ISODate("1995-02-04T16:52:32.601Z"),
        "name": "peter"
        "married": [{
            "_id": ObjectId("456"),
            "modified": ISODate("2015-02-04T16:52:32.601Z"),
            "birth": ISODate("1999-02-04T16:52:32.601Z"),
            "name": "uschi"
        }, ...]
    }, ...]

该解决方案有问题吗?

2 个答案:

答案 0 :(得分:1)

我在这个解决方案中看到的主要问题是您使用MongoDB来存储关系数据。我过去做过这件事而后悔了。考虑使用Postgres。它是一个关系数据库,但也有一个名为hstore的功能,如果你的模式有一些可能没有很好定义的区域,它允许你存储和查询任意结构的json。

答案 1 :(得分:0)

图形数据库似乎与您的问题域完美匹配。 这样你就不必实现与"关系相关的所有逻辑。在你的申请中。 GraphDB本身就能理解它们。

即。 neo4j

图表数据库允许

  • 轻松处理复杂的关系

  • 快速遍历关系

  • 快速搜索朋友类型的关系"或者与珍妮特有关的吉姆

一般情况下,如果您打算以各种方式查询关系中的数据,那么图数据库就是您的选择,