Javascript 如何在解析中创建嵌套的多对多关系

Javascript 如何在解析中创建嵌套的多对多关系,javascript,parse-platform,relationship,Javascript,Parse Platform,Relationship,在我的网上商店里,我基本上有两个解析类:Product和Order。 当用户填充他的购物车时,我在一个本地项目数组(javascript对象)中反映了这一点,其中包含一个产品属性(解析类)和另一个特定产品在购物车中应该拥有的数量属性 如果我现在保存要解析的订单(我使用的是自托管开源版本的parse server),我最终会得到一个订单对象,如下所示: { "_id": "8XK6gbZZvE", "items": [ { "amount": 3, "pro

在我的网上商店里,我基本上有两个解析类:Product和Order。 当用户填充他的购物车时,我在一个本地项目数组(javascript对象)中反映了这一点,其中包含一个产品属性(解析类)和另一个特定产品在购物车中应该拥有的数量属性

如果我现在保存要解析的订单(我使用的是自托管开源版本的parse server),我最终会得到一个订单对象,如下所示:

{
  "_id": "8XK6gbZZvE",
  "items": [
    {
      "amount": 3,
      "product": {
        "__type": "Pointer",
        "className": "Product",
        "objectId": "VWOxzFui6R"
      }
    }
  ],
  "total": 1800,
  "status": "pending",
  ...
}
我的问题是,我找不到一种方法来查询结果已经包含产品的订单

目前我能想到的唯一方法是去掉数量,这样我就不必将product类嵌套在JS对象中。然后,如果需要,只需将产品多次添加到阵列中即可

诸如此类:

{
  "_id": "6j7l5acSB3",
  "items": [
    {
      "__type": "Pointer",
      "className": "Product",
      "objectId": "VWOxzFui6R"
    }
  ],
  "total": 1210,
  "status": "processing",
  ...
}
这样我就可以在订单查询中包含这些项目,如下面的
query.include('items')


但是,还有一个解决方案吗?我如何使用像第一个结构一样的结构,并且仍然能够在订单查询中包含产品?如果用户订购了相同的产品(例如2或3次),那么在一个阵列中多次使用相同的产品会有点“多余”。

在大多数电子商务系统中,这样做的方式是使用另一个对象将数据添加到订单和产品之间的关系中,例如

// Order
{ lineItems: [ <pointer to line item>, < etc > ],
  orderTotal: number,
  // other fields: probably a customer-pointer, tax, shipping, etc
};

// Line Item - this is the missing concept in the OP
{ product: <pointer to product>,
  unitPrice: number,
  quantity: number
};

// Product as you have it
//订单
{lineItems:[,],
订单总数:,
//其他字段:可能是客户指针、税务、运输等
};
//行项目-这是OP中缺少的概念
{乘积:,
单价:个,
数量:个
};
//按您现有的产品
请注意,
unitPrice
可能与产品中保留的price属性是多余的。当产品添加到订单中时,应用程序会将产品价格复制到此字段。这使得业务逻辑能够决定在创建订单后,如果产品价格发生变化,该怎么做


订单查询可以
包括('lineItems','lineItems.product')

,因此您的建议需要一个名为“line\u items”的新数据库集合,对吗?特别是因为你指出产品价格可能会改变,这绝对是有道理的。我刚刚测试了你建议的使用指针的方法,效果很好。我只是不确定使用联接表是否更好。是的。建议新的行项目集合。它是订单和产品之间的联接。是的,从技术上讲,这个新的LineItem集合充当联接,但parse提供了专用联接功能来创建这些联接(请参阅:)但是我仍然不相信在你建议的指针解决方案中使用这个特定的连接功能。你是说在关系的哪一边将指针放在订单和行项目之间?如果不了解更多有关应用程序的信息,这将很困难,但请记住,如果您在LineItem端有指针,那么您可能正在进行第二次查询,以从订单获取行项目。(查找订单等于某订单的行项目)。我喜欢“属于”一侧的单数指针,但问题似乎只针对一个查询。还值得注意的是,纯mongodb订单可能会在订单文档中嵌入行项目(这可能在parse.com关闭后相关),因为我使用的是自托管(开源)版本的parse,所以我不一定需要在订单中嵌入行项目。因此,我想我现在只会继续使用订单端的指针。感觉在订单中嵌入行项目是我以后可以做的事情,如果需要的话。THX,你的输入帮助很大!