如何使用RethinkDB删除数组中的元素

时间:2016-01-03 05:29:46

标签: go rethinkdb

我有一个包含Lobbys的表,它基本上只是Party Room,它有一个Members数组和一个Messages数组,这是一个例子:

{
"id":  "a77be9ff-e10f-41c1-8a4c-66b5a55d823c" ,
"members": [
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt" ,
"Gacnt"
] ,
"messages": [ ]
}

现在当用户websocket连接到Lobby时,它会将他们的用户名添加到Members列表中,我正在尝试将其设置为当用户离开{{1}时它将它们从成员列表中删除,我想出了这个:

Party

但我收到错误:

r.db("gofinder").table("Lobbys").get("a77be9ff-e10f-41c1-8a4c-66b5a55d823c")("members").update({
  members: r.db("gofinder").table("Lobbys").get("a77be9ff-e10f-41c1-8a4c-66b5a55d823c")("members").ne("Gacnt")
})

但显然有一个错误,我是Rethink的新手所以我不确定如何做到这一点,除非我应该选择数组,自己修改它然后把新数组放回去。

目前我正在使用此解决方案,但我觉得它可能更简单,特别是如果我可以将其留给e: Could not prove argument deterministic. Maybe you want to use the non_atomic flag? in: r.db("gofinder").table("Lobbys").get("a77be9ff-e10f-41c1-8a4c-66b5a55d823c")("members").update({"members": r.db("gofinder").table("Lobbys").get("a77be9ff-e10f-41c1-8a4c-66b5a55d823c")("members").ne("Gacnt")}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 修改数组而不必手动执行

这是我目前的解决方案,与问题无关

ReQL

1 个答案:

答案 0 :(得分:6)

你可能想要这样的东西:

SELECT DISTINCT
SEC_USER.USR_ID         AS USR_ID,
SEC_USER.USR_FIRST_NAME AS USR_FIRST_NAME,
SEC_USER.USR_LAST_NAME  AS USR_LAST_NAME,
SEC_USER_PRIV.ROLE_ID   AS SYSTEM_ROLE_ID,
21 AS ENTITY_TYP_CODE,
SEC_NN_SERVER_T.SRV_ID AS ENTITY_ID
FROM SEC_USER_PRIV inner join
     SEC_USER on SEC_USER.USR_ID = SEC_USER_PRIV.USR_ID inner join
     SERVER_T on SEC_USER_PRIV.ENTITY_ID = SERVER_T.SRV_ID 
             and UPPER(SERVER_T.SRV_NAME) LIKE '%GEN%'
where SEC_USER_PRIV.ENTITY_TYP_CODE = 21