如何在 Clojure 中使用数组 JOIN Seq?
How JOIN Seq with Array in Clojure?
我会尝试对 MongoDB 的结果执行 SQL JOIN。
我有数据要显示在网格上:
seqgroup: ({:_id #<ObjectId 54db3ba76a5b2d5de2e7e990>, :group_name gr1, :usersingroup_id [#<ObjectId 54d1e37a2039b30a00b342ca> #<ObjectId 54d8ab240e81f5d1cbf6f691>]}
{:_id #<ObjectId 54db46ba6a5b2d5de2e7e992>, :group_name gr2, :usersingroup_id [#<ObjectId 54d8af860e81f5d1cbf71da3> #<ObjectId 54d8ab240e81f5d1cbf6f691>]})
我想用 returns 数组显示我保存在不同集合中的用户名,而不是 ObjectId :usersingroup_id :
get-one-user-byid: {:_id #<ObjectId 54d1e37a2039b30a00b342ca>, :id someuser1}
get-one-user-byid: {:_id #<ObjectId 54d8ab240e81f5d1cbf6f691>, :id someuser2}
我会怎样 walk/get/conj/??或其他任何包含用户名而不是 ObjectId 的序列?
seqresultgroup: ({:_id #<ObjectId 54db3ba76a5b2d5de2e7e990>, :group_name gr1, :usersingroup_id [someuser1 someuser2]}
{:_id #<ObjectId 54db46ba6a5b2d5de2e7e992>, :group_name gr2, :usersingroup_id [someuser3 someuser2]})
如果我对你的问题的理解正确,你可以尝试这样的事情。我们在组序列上映射一个匿名函数,将用户 ID 向量更新为用户名向量。 userids->usernames
函数映射一个匿名函数,该函数从 id 向量上的 get-one-user-byid
函数的结果中提取 :id
。这导致每个组映射的 :usersingroupid
向量被设置为用户 ID 的向量。
(defn userids->usernames [id-coll]
(map #(:id (get-one-user-byid %)) id-coll))
(map #(assoc % :usersingroup_id (userids->usernames (:usersingroupid %))) seqgroup)
#(assoc % :usersingroup_id ...)
- 上面的匿名函数是 "mapped" 您调用
seqgroup
的 "group" 个映射列表。此函数将获取每个组映射 %
,将键 :usersingroup_id
的值更改为使用键 :usersingroup_id
的值调用 userids->usernames
的结果给定组映射作为参数。
userids->usernames
- 此函数采用组 ID 向量,并在其上映射一个匿名函数。匿名函数使用您的
get-one-user-byid
函数将用户 %
的 :_id
转换为用户映射。我们通过简单地将 (get-one-user-byid %)
包装在 (:id ...)
中,从用户映射中提取 :id
我会尝试对 MongoDB 的结果执行 SQL JOIN。 我有数据要显示在网格上:
seqgroup: ({:_id #<ObjectId 54db3ba76a5b2d5de2e7e990>, :group_name gr1, :usersingroup_id [#<ObjectId 54d1e37a2039b30a00b342ca> #<ObjectId 54d8ab240e81f5d1cbf6f691>]}
{:_id #<ObjectId 54db46ba6a5b2d5de2e7e992>, :group_name gr2, :usersingroup_id [#<ObjectId 54d8af860e81f5d1cbf71da3> #<ObjectId 54d8ab240e81f5d1cbf6f691>]})
我想用 returns 数组显示我保存在不同集合中的用户名,而不是 ObjectId :usersingroup_id :
get-one-user-byid: {:_id #<ObjectId 54d1e37a2039b30a00b342ca>, :id someuser1}
get-one-user-byid: {:_id #<ObjectId 54d8ab240e81f5d1cbf6f691>, :id someuser2}
我会怎样 walk/get/conj/??或其他任何包含用户名而不是 ObjectId 的序列?
seqresultgroup: ({:_id #<ObjectId 54db3ba76a5b2d5de2e7e990>, :group_name gr1, :usersingroup_id [someuser1 someuser2]}
{:_id #<ObjectId 54db46ba6a5b2d5de2e7e992>, :group_name gr2, :usersingroup_id [someuser3 someuser2]})
如果我对你的问题的理解正确,你可以尝试这样的事情。我们在组序列上映射一个匿名函数,将用户 ID 向量更新为用户名向量。 userids->usernames
函数映射一个匿名函数,该函数从 id 向量上的 get-one-user-byid
函数的结果中提取 :id
。这导致每个组映射的 :usersingroupid
向量被设置为用户 ID 的向量。
(defn userids->usernames [id-coll]
(map #(:id (get-one-user-byid %)) id-coll))
(map #(assoc % :usersingroup_id (userids->usernames (:usersingroupid %))) seqgroup)
#(assoc % :usersingroup_id ...)
- 上面的匿名函数是 "mapped" 您调用
seqgroup
的 "group" 个映射列表。此函数将获取每个组映射%
,将键:usersingroup_id
的值更改为使用键:usersingroup_id
的值调用userids->usernames
的结果给定组映射作为参数。
- 上面的匿名函数是 "mapped" 您调用
userids->usernames
- 此函数采用组 ID 向量,并在其上映射一个匿名函数。匿名函数使用您的
get-one-user-byid
函数将用户%
的:_id
转换为用户映射。我们通过简单地将(get-one-user-byid %)
包装在(:id ...)
中,从用户映射中提取
:id
- 此函数采用组 ID 向量,并在其上映射一个匿名函数。匿名函数使用您的