【问题标题】:mongodb one to many relationmongodb 一对多关系
【发布时间】:2015-04-15 02:45:07
【问题描述】:

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

List<Product>

我的问题是。

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

    _categoryCollection.Update(id, Update.Push…)

  2. 问题 2: 或者 我们不应该只拥有所谓的“产品集合”。相反,我们应该只有一个包含嵌套产品的类别集合。并在提交时将这个新产品推送到相应的类别中。

    问题 2.1:如果我们想在添加产品后对产品与类别进行关联怎么办? ?

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

【问题讨论】:

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


    【解决方案1】:

    我一直发现这篇 MongoDB 文章是解决此类问题的好资源。

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

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

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

    斯科特

    【讨论】:

    • 我明白你的意思,但如果我想保留单独的文件。当我插入产品时,它是一个两步过程,即我首先在产品集合中插入产品,然后将此产品推送到类别集合的嵌套产品中?
    • 我会说,您应该有一个具有类别属性的产品集合。如果您想要一个类别的所有产品,请查询产品集合。您需要一个关于类别的索引。一份收藏,一份查询。如果您需要更新产品,这是一个查询。如果你需要更新一个类别,它是两个查询,但不经常发生那么好。
    • 但在我的应用程序中,我希望用户添加类别,然后在添加产品时选择类别。
    【解决方案2】:

    这里可以考虑几点:

    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
    

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

    【讨论】:

    • 我明白你的意思,但如果我想保留单独的文件。当我插入产品时,它是一个两步过程,即我首先在产品集合中插入产品,然后将此产品推送到类别集合的嵌套产品中?
    • 如果你在维护两个集合,就不会有嵌套的问题。因此,您将填充了 categoryId 字段的产品推送到其集合中。然后,您可以使用此字段“加入”这些集合。
    猜你喜欢
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2015-10-25
    • 2018-11-02
    • 2019-08-23
    • 2016-01-17
    • 2022-12-23
    相关资源
    最近更新 更多