2014-12-19 79 views
0

我有一个数据库结构,其文档使用一个外键来引用对方。即使MongoDB在JOIN查询中表现不佳,我们也可以通过运行基于外键的单独查询来获取文档。MongoDB正确的自动增量方式

我可以使用MongoDB的ObjectID(_id),这是唯一的。但是它太长了,并且在客户端显示这个冗长的ID来查询数据看起来并不那么难看。我想在MongoDB中创建自定义自动递增,这将解决这个问题,但MongoDB的文档说:

一般在MongoDB中,你不会使用的_id字段的自动增量模式,或任何领域,因为它不能针对包含大量文档的数据库进行扩展。

那么什么是

Collection: Products 
{ 
    Project_ID: 1001, <Auto Incrementing> 
    Product: "Example Product", 
    ..<Few other fields>.. 
} 


Collection: Payments 
{ 
    Project_ID: 1001, <Foreign key> 
    Pay_ID: 2001, <Auto Incrementing> 
    ..<Few other fields>.. 
} 


Collection: Others 
{ 
    Project_ID: 1001, <Foreign key> 
    Pay_ID: 2001, <Foreign key> 
    Other_ID: 3001, <Auto Incrementing> 
    ..<Few other fields>.. 
} 
+1

这是罕见的显示'_id'到客户端,对不对?您可以使用'POST'请求​​隐藏'_id'。 – Raptor 2014-12-19 04:07:42

+0

呃,并且关于每种显示技术都允许枚举表格行等。为了让OP长话短说:没有自动增量。 – 2014-12-19 06:43:28

+1

@OP:我有这样的感觉,你正在尝试做的(明智或潜意识)是使用MongoDB作为RDBMS。在MongoDB中没有外键的概念,没有自动增量。如果您尝试使用MongoDB来模拟RDBMS,那么会发生什么:最终会出现一个过度规范化,表现不佳的系统,其代码基础臃肿。整个发展过程与一开始不同。在RDBMS中,您类似于您的域模型结构,并试图回答您的问题。在MongoDB中,根据您想要回答的问题创建模型。 – 2014-12-19 06:57:20

回答

0

的MongoDB并不意味着像关系数据库用于下面我数据结构的最佳解决方案。它不支持服务器端的外键概念。理想情况下,您必须嵌入子文档。欲了解更多信息请参考这个帖子

MongoDB normalization, foreign key and joining