首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于从中央到子公司继承内容的模式

用于从中央到子公司继承内容的模式
EN

Stack Overflow用户
提问于 2021-06-11 19:51:33
回答 1查看 22关注 0票数 0

我们有一个内容模型,我们在中央级别设置内容,但如果用户愿意,他们可以将内容编辑到附属级别。如果他们不想对从中心设置的内容进行任何更改,则不必进行更改。

让我们假设一个简单的api端点,它只接受companyId。这是它的回应方式:

代码语言:javascript
复制
GET /offers (central values)
[{
  offerId: 1,
  title: "Central offer title",
  paragraph: "Lorem ipsum central",
  price: 100
}, {...more offers}]

公司123

代码语言:javascript
复制
/offers?companyId=123
[{
  offerId: 1,
  title: "Company offer title",
  paragraph: "Lorem ipsum central", // Inherited from central
  price: 125
}, {...more offers}]

456公司,它是123的子公司

代码语言:javascript
复制
/offers?companyId=456
[{
  offerId: 1,
  title: "Company offer title", // Inherited from Company 1
  paragraph: "Lorem ipsum subsidiary",
  price: 125, // Inherited from Company 1
  custom_field: "A completely custom field for subsidiary" // Field only available for subsidiary
}, {...more offers}]

在以前的实现中,我们已经完成了以下内容:

代码语言:javascript
复制
{
  offerId: 1,
  values: [
    {
      companyId: null,
      title: "Central offer title",
      paragraph: "Lorem ipsum central",
      price: 100
    },
    {
      companyId: 123,
      title: "Company offer title",
      price: 125
    },
    {
      companyId: 456,
      paragraph: "Lorem ipsum subsidiary",
      custom_field: "A completely custom field for subsidiary"
    }
  ]
}

然后在应用程序中,我们对此进行了编译,以便针对子公司的值是特定的,但仍继承了来自中央公司或母公司的数据。

现在我们将要编写新的应用程序,应该再次允许这种类型的内容继承,我们对这种方法有疑问,并想知道是否有其他方法来模拟这种情况。

还有什么其他方法可以模拟这种类型的行为?

EN

回答 1

Stack Overflow用户

发布于 2021-06-11 20:05:27

你在用mongoose吗?如果是,请使用Discriminators

代码语言:javascript
复制
const event1 = new Event({ time: Date.now() });
const event2 = new ClickedLinkEvent({ time: Date.now(), url: 'google.com' });
const event3 = new SignedUpEvent({ time: Date.now(), user: 'testuser' });

在这个精读中有更多关于这个主题的内容:https://dev.to/helenasometimes/getting-started-with-mongoose-discriminators-in-expressjs--22m9

如果不是,那么我认为您应该遵循与mongoose相同的方法,将每个公司作为单独的文档。因为在您的旧设置中,有几件事:

  1. 公司驻留在Offer document
  2. 中如果多个优惠使用相同的公司,您会复制公司数据,对吧?
  3. 没有简单的方法来搜索公司-您获得offers.values并在其中搜索属性。这基本上就是遍历整个数据库。

如果您只按公司搜索(而不是您所说的提供ID ),您可以将它们反向搜索。但这仍然很奇怪。我将它们分成两个单独的东西,并在它们之间使用引用。通过这种方式,您可以:

  1. 通过id查找公司
  2. 查找其父公司(执行此操作,直到没有父公司为止;使用aggregate在单个查询中创建)
  3. 获取该公司的优惠列表(文档属性)并查询它们

这种方法会让你做相反的事情(向公司提供服务)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67936533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档