使用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"]}这是预期的行为吗?如果是的话,原因何在?
发布于 2017-08-14 15:32:33
这是预期的行为,因为mongo数据库存储不支持关键字;它本质上是json。dblist
您必须使用monger.conversion/from-db-object手动将值转换回关键字。
发布于 2017-08-14 18:02:17
方法insert-并返回返回您传递给它的相同数据以及创建的文档id。
(defn insert-and-return
[db coll _]
...
(let [doc (merge {:_id (ObjectId.)} document)]
(insert db coll doc concern)
doc))方法find- map -by-id只从mongodb获取数据,并使用函数-db-object将原始数据转换为clojure数据结构,其中只有映射的键才会被关键字编码。您的地图的价值将不会被关键字化。
(from-db-object ^DBObject (find-one db coll ref) true)
;;where
(defprotocol ConvertFromDBObject
(from-db-object [input keywordize))https://stackoverflow.com/questions/45677891
复制相似问题