猿问

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

我有一个表格,其中包含Lobbys基本上只是派对房间,它有一个成员数组和一个消息数组,这是一个例子:


{

"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列表中,我正在尝试这样做,以便当用户离开时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")

})

但我收到错误:


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")})

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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


现在我正在使用这个解决方案,但我觉得它可能更简单,特别是如果我可以让它ReQL修改数组而不是手动完成


绝地无双
浏览 220回答 1
1回答

倚天杖

你可能想要这样的东西:r.db('gofinder').table('Lobbys').get(ID).update(function(row) {  return {members: row('members').setDifference(['Gacnt'])};})
随时随地看视频慕课网APP

相关分类

Go
我要回答