как получить элемент _id из коллекции map-Reduce - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь получить значение ключа "_id" коллекции, созданной с помощью операции уменьшения карты.

Я запускаю функцию (fill-mr-template) ниже, чтобы сохранить значения, сгенерированные измоя операция уменьшения карты.

(defun fill-mr-template ()
  (let ( (found-mr (docs (db.find *mr-collection* :all))))
    (loop for i in found-mr collect
      (let ( (mr-object (make-instance 'mr
                :_id   (get-element "_id" i)
                    :value (get-element "value" i))))
        (list :_id (_id mr-object)
          :value (value mr-object))))))

Результаты для этого в REPL:

((:_ID NIL :VALUE 30.0d0) (:_ID NIL :VALUE 20.0d0))

И моя коллекция в mongoDB:

> db.*mr-collection*.find().pretty()
{ "_id" : "16 months", "value" : 30 }
{ "_id" : "18 months", "value" : 20 }

Итак, как вы можете видеть, моя функция (fill-mr-template) получает значение из &key :value, но получает NIL для &key :_id.

Ниже приведен классЯ использую mr для создания объекта "mr-object" для хранения значений.

(defclass mr ()
  ( (_id   :accessor _id
       :initarg :_id)

    (value :accessor value
       :initarg :value)))

Может кто-нибудь помочь с этим? Спасибо!

1 Ответ

1 голос
/ 21 октября 2019

Идентификатор непосредственно сохраняется как слот в случае cl-mongo:document. Другие элементы хранятся в хеш-таблице и могут быть получены с помощью get-element;но, скорее всего, к идентификатору можно обратиться по телефону cl-mongo:doc-id.

...