mongodb一对多的关系

时间:2015-04-15 02:45:07

标签: mongodb one-to-many mongo-c-driver

我是MongoDB的新手,从传统的SQL关系方法转向。我正在研究一个简单的“类别有很多产品”场景(c#.Net)。哪个类别

List<Product>

我的问题是。

  1. 问题1:在“添加产品”屏幕上,我有一个下拉列表。所以提交我应该 首先在产品集合中插入产品然后 推送此产品在类别集合的嵌套产品中。

    _categoryCollection.Update(id,Update&lt; Category&gt; .Push ...)

  2. 问题2: 要么 我们不应该只有一个叫做“产品系列”的东西。相反,我们应该只有一个带有嵌套产品的Categories集合。提交时,只需将此新产品推送到相应的类别中。

    问题2.1:如果我们想在添加产品后对具有类别的产品进行此关联,该怎么办? ?

  3. 或 问题3: 考虑问题一。我们应该在Product实体中使用CategoryId吗?这在No SQL概念中是否有意义?

2 个答案:

答案 0 :(得分:0)

我总是发现这篇MongoDB文章是这类问题的一个很好的资源。

http://docs.mongodb.org/ecosystem/use-cases/product-catalog/

您需要问的问题是,如何访问数据?我的目标是什么,它们是如何形成的?首先从编程开始,创建类(域对象)和访问模式,然后担心Mongo。你会看到,Mongo不会真的妨碍你。这就是应该做的事情。

所以,回到你的场景。如果您知道类别的数量会很大,需要经常严格控制和操纵,那么您可以为它们设置第二个集合,并在产品文档的类别字段中引用该集合的_id字段。重要的是,类别的值本身应与每个产品文档一起存储,以便由于少一个查询或需要加入数据而快速读取。

斯科特

答案 1 :(得分:0)

可以在这里做一些考虑:

If a category has many products but a product cannot belong to more than one category, then
    If number of products is not expected to be very large per category, then
        Nest products inside category document
    Else, use a different collection for products and use field 'categoryId' in them
Else, use use a different collection for products and use field 'categoryId' in them

只有当文档中有一个明确的父文件并且它们不是很大或太多时才会嵌套文档。否则,父文档将变得庞大而无法控制其大小。