2017-08-14 56 views
0

,我寫的是包含像關鍵字項轉換爲字符串使用商販

(monger.collection/insert-and-return db 
            "test-coll" {:_id 1 :some-vector [:a-keyword]}) 

返回預期與關鍵字項的矢量集合的文檔

{:_id 1, :some-vector [:a-keyword]} 

但後來如果我提取特定文件如

(monger.collection/find-map-by-id db "test-coll" 1) 

該關鍵字已被更改爲stri ng

{:_id 1, :some-vector ["a-keyword"]} 

這是預期的行爲,如果是這樣,爲什麼?

回答

1

插入和返回方法返回您傳遞給它的相同數據以及創建的文檔ID。

(defn insert-and-return 
    [db coll _] 
... 
    (let [doc (merge {:_id (ObjectId.)} document)] 
    (insert db coll doc concern) 
    doc)) 

的方法找到映射逐ID剛從mongodb的讀取數據,並使用該函數從-DB-對象的原始數據轉換爲Clojure的數據結構,其中只有一個映射的鍵將被keywordized。您的地圖的價值將不會被關鍵字化。

(from-db-object ^DBObject (find-one db coll ref) true) 

;;where 
(defprotocol ConvertFromDBObject 
    (from-db-object [input keywordize))