如何在Moqui实体中建模顶点和边缘

时间:2015-12-16 11:46:37

标签: orientdb graph-databases moqui

发现Moqui可以与OrientDB一起使用。作为Moqui和图形数据库的新手,我的问题是:如何在Moqui的实体中放置Vertex和edge?我的意思是,在RDMS中,如果我想记录不同的人,我可以提出一些事情:

SELECT
t.user_id AS user_id,
t.organisation_id AS organisation_id,
t.firstname AS firstname,
t.surname AS surname,
t.username AS username,
t.year_id AS year_id,
t.form_name AS form_name,
t.House AS House,
rcPoints.total AS milestoneRedeemedCodesTotal,
rcFilteredPoints.total AS redeemedCodesTotalFiltered,
(
    COALESCE (rcFilteredPoints.total, 0) - COALESCE (milestoneHistory.total, 0)
) AS redeemedCodesTotalAvailableFiltered,
ABS(
    FLOOR(
        (
            COALESCE (rcFilteredPoints.total, 0) - COALESCE (milestoneHistory.total, 0)
        ) / 1000
    ) * 1000
) AS redeemedCodesTotalTowardsMilestone,
ABS(
    FLOOR(
        (
            COALESCE (rcFilteredPoints.total, 0) - COALESCE (milestoneHistory.total, 0)
        ) / 1000
    )
) AS redeemedCodesMilestoneTriggers,
COALESCE (milestoneHistory.total, 0) AS historyTotal
FROM
`myuser` `t`
LEFT JOIN (
SELECT
    rc.user_id AS user_id,
    SUM(rc.school_points) AS total
FROM
    `redeemed_codes` `rc`
INNER JOIN myuser m ON (m.user_id = rc.user_id)
WHERE
    (rc.date_redeemed >= 0)
AND (m.organisation_id = 58022)
GROUP BY
    rc.user_id
) AS rcPoints ON (rcPoints.user_id = t.user_id)
LEFT JOIN (
SELECT
    rc.user_id AS user_id,
    SUM(rc.school_points) AS total
FROM
    `redeemed_codes` `rc`
INNER JOIN myuser m ON (m.user_id = rc.user_id)
WHERE
    (rc.date_redeemed >= 0)
AND (m.organisation_id = 58022)
GROUP BY
    rc.user_id
) AS rcFilteredPoints ON (
 rcFilteredPoints.user_id = t.user_id
)
LEFT JOIN (
SELECT
    mh.user_id AS user_id,
    mh.milestone_id AS milestone_id,
    MAX(mh.points_when_triggered) AS total
FROM
    `milestone_history` `mh`
WHERE
    mh.milestone_id = 13
GROUP BY
    mh.user_id
) AS milestoneHistory ON (
milestoneHistory.user_id = t.user_id
)
WHERE
(
    (
        SELECT
            COALESCE (count(*), 0)
        FROM
            milestone_history mha
        WHERE
            mha.milestone_id = 13
        AND mha.user_id = t.user_id
    ) = 0
)
AND (t.organisation_id = 58022)

AND 
 ( 
 SELECT * FROM
redeemed_codes t1
WHERE
organisation_id = 1
AND
(
    SELECT
        sum(school_points)
    FROM
        redeemed_codes t2
    WHERE
        t2.redeemed_code_id <= t1.redeemed_code_id
) >= 1000
 ORDER BY redeemed_code_id
 LIMIT 1
)

GROUP BY
t.user_id
ORDER BY
redeemedCodesMilestoneTriggers DESC
LIMIT 1

如果我想在OrientDB中创建不同人物的顶点,如何编写实体?

如何在XML代码中创建优势?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果通过Entity Facade使用OrientDB,则只能将其用作OrientDB文档数据库中的简单关系结构。要使用完整的文档,图表和其他Orient功能,您必须直接使用API​​。

文档,图形和其他NoSQL数据库中的结构和API的标准仍然很少,因此最好的方法是使用给定数据库的API,而不是使用像Entity Facade这样的抽象层。