如何将元素obj更改为cl-mongo中的列表?

时间:2013-12-05 14:31:20

标签: mongodb common-lisp

db.find将返回MongoDB中的文档。

我想获取文档的所有元素,然后更改为alist。

但是我还没有找到获取元素的函数。

我发现元素是文档中的hashmap,它有一个名为elements的访问器。

但是当我在自己的包中使用(elements docTmp)时,它返回没有名为elements的函数。

1 个答案:

答案 0 :(得分:0)

我建议不要深入研究document的内部,而是使用提供的函数mapdoc。您还可以考虑递归解析以将可能的子文档转换为alists。所以代码可能如下所示:

(defgeneric mongo-document->alist (doc))

(defmethod mongo-document->alist ((doc cl-mongo:document))
  (let ((alist '()))
    (cl-mongo:mapdoc (lambda (key value)
                       (push
                        (cons
                         key
                         (mongo-document->alist value))
                        alist))
                     doc)
    alist))

(defmethod mongo-document->alist ((obj t))
  obj)