monger vector中的关键字项目将转换为字符串

时间:2017-08-14 15:23:57

标签: mongodb clojure monger

使用monger,我正在编写一个文档,其中包含带有关键字项的向量到

之类的集合
(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)

关键字已更改为字符串

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

这是预期的行为,如果是这样,为什么?

2 个答案:

答案 0 :(得分:3)

这是预期的行为,因为mongo数据库商店不支持关键字;它基本上是jsonhttp://clojuremongodb.info/articles/inserting.html#serialization_of_clojure_data_types_to_dbobject_and_dblist

您必须使用手动将值转换回关键字 monger.conversion/from-db-object

答案 1 :(得分:1)

insert-and-return方法返回您传递给它的相同数据以及创建的文档ID。

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

方法find-map-by-id只是从mongodb获取数据,并使用from-db-object函数将原始数据转换为clojure数据结构,其中只有关键字化地图的键。您的地图的价值不会被关键字化。

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

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