我遇到了一个问题,不确定如何处理。基本上,我有一个数据库调用,它返回一系列地图。我需要对每个映射的特定元素进行更改,然后返回一个具有所有相同值的新序列,但我更改的值除外。
我目前有以下代码,可以迭代序列并打印序列,但是我不确定如何实际构建新序列。
(defn find-character-by-id []
(let [
character (mc/find-maps db "characters" {:user_id "5b4403d3c1025107593fa0b4" })
]
(doseq [s character]
(println s))))
示例地图可能是:
{:_id #object[org.bson.types.ObjectId 0x74bb0de6 5b467e5bc102511a1729a0f1], :user_id 5b4403d3c1025107593fa0b4, :value 20}
我现在的目标是能够应用自定义函数以将_id覆盖到字符串,但是我可能还想向值添加任意数量,以便最好使用泛型。
答案 0 :(得分:1)
如果您想使用某些:_id
函数将每个to-str
转换为字符串,则可以编写:
(mapv ; Turn characters into a modified vector
#(update % :_id to-str) ; by updating each map :_id using to-str
characters)
我正在map
遍历每张地图,然后通过对每个update
值应用:_id
to-str
来:_id
。
每次要将一个列表转换为长度相等的另一个列表时,请使用map
或mapv
。如果需要一些过滤功能,也可以使用for
。
每当您要基于其旧值更改与地图中某个键相关联的值时,请使用update
。
我只是将两者结合在一起。
doseq
实际上仅应在您进行迭代而无意创建新列表的情况下使用,或者正在通过某种突变创建正在创建的新列表。它没有任何有用的评估。