我的网上商店基本上有 2 个解析类:产品和订单。 当用户填充他的购物车时,我将其反射(reflect)在本地项目数组(javascript 对象)中,其中包含产品的属性(解析类)和特定产品在购物车中应具有的数量的另一个属性。
如果我现在保存要解析的订单(我使用的是解析服务器的自托管开源版本),我最终会得到如下订单对象:
{
"_id": "8XK6gbZZvE",
"items": [
{
"amount": 3,
"product": {
"__type": "Pointer",
"className": "Product",
"objectId": "VWOxzFui6R"
}
}
],
"total": 1800,
"status": "pending",
...
}
我的问题是,我找不到查询结果已包含产品的订单的方法。
我目前能想到的唯一方法是去掉 amount,这样我就不必将产品类嵌套在 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
请注意,unitPrice
对于与产品一起保存的价格属性来说可能是多余的。当产品添加到订单时,应用程序会将产品价格复制到此字段。这使得业务逻辑能够决定在订单创建后产品价格发生变化时该怎么办。
订单查询可以include('lineItems', 'lineItems.product')
关于javascript - 如何在解析中创建嵌套的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021467/