OrientDB 电子商务用例 + NodeJS

OrientDB eCommerce use case + NodeJS

我是 OrientDB 的新手,我有这个用例:

Attributes(1,n)--->AttributesValues

产品(1,n)--->SKU<---(n,n)属性值

我的问题是:我可以通过一次查询从产品中获取所有 SKU(和 AttributesValues、属性)吗?

TRAVERSE 可能对这项任务有用。不幸的是,您没有指定您希望如何组织数据(问题是 TRAVERSE 不会像您希望的那样 'nest' 记录),所以最终它可能不合适,但它肯定会 get all SKUs (and AttributesValues, Attributes) from a Product with one query.

注意:我会在下面补一些边缘名称,因为你没有提到任何。

要获取带有 rid #11:0 的产品的所有 SKU,您可以执行类似 SELECT expand(out('has_SKU')) from #11:0 的操作。要同时获取所有属性,您可以执行 TRAVERSE in('has_AttributeValue') FROM (SELECT expand(out('has_SKU')) from #11:0)。您现在将获得一个包含所有 SKU 和链接到原始产品的属性值的结果集。

遗憾的是,此时您并不知道哪个 AttributesValue 属于哪个 SKU。此外,TRAVERSE 仅 returns 每条记录一次,因此如果超过 1 个 SKU 共享相同的 AttributesValue,它只会在结果中出现一次。 SKU 记录将有一个 in_has_AttributeValue 字段,它将是一个 AttributesValue 列表,您可以使用它来关联软件中的记录。

要同时获取属性,您可以尝试 TRAVERSE in('has_AttributeValue','has_Attribute') FROM (SELECT expand(out('has_SKU')) from #11:0)。这可能会或可能不会工作,具体取决于您所有边缘的设置方式。此遍历将跟随它找到的每条记录上的任何 in_has_AttributeValue 或 in_has_Attribute 字段。如果一个 SKU 有一些直接链接到它的属性,但您只希望属性链接到一个 AttributeValue,并且这些属性使用相同的边缘名称(即 has_Attribute),那么此查询将不合适。您应该考虑这种情况,并适当地设计您的数据库设置(即使用特定的边缘名称)。