monger 向量中的关键字项被转换为字符串
Keyword item in monger vector is converted to string
我正在使用 monger 编写一个文档,其中包含一个带有关键字项的向量到一个集合,例如
(monger.collection/insert-and-return db
"test-coll" {:_id 1 :some-vector [:a-keyword]})
符合预期returns
{:_id 1, :some-vector [:a-keyword]}
但是如果我像
那样获取特定文档
(monger.collection/find-map-by-id db "test-coll" 1)
关键字已更改为字符串
{:_id 1, :some-vector ["a-keyword"]}
这是预期的行为吗?如果是,为什么?
这是预期的行为,因为 mongo 数据库存储不支持关键字;它本质上是 json
。
http://clojuremongodb.info/articles/inserting.html#serialization_of_clojure_data_types_to_dbobject_and_dblist
您必须使用手动将值转换回关键字
monger.conversion/from-db-object
.
方法 insert-and-return returns 您传递给它的相同数据加上创建的文档 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))
我正在使用 monger 编写一个文档,其中包含一个带有关键字项的向量到一个集合,例如
(monger.collection/insert-and-return db
"test-coll" {:_id 1 :some-vector [:a-keyword]})
符合预期returns
{:_id 1, :some-vector [:a-keyword]}
但是如果我像
那样获取特定文档(monger.collection/find-map-by-id db "test-coll" 1)
关键字已更改为字符串
{:_id 1, :some-vector ["a-keyword"]}
这是预期的行为吗?如果是,为什么?
这是预期的行为,因为 mongo 数据库存储不支持关键字;它本质上是 json
。
http://clojuremongodb.info/articles/inserting.html#serialization_of_clojure_data_types_to_dbobject_and_dblist
您必须使用手动将值转换回关键字
monger.conversion/from-db-object
.
方法 insert-and-return returns 您传递给它的相同数据加上创建的文档 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))