I should remove the parens before they confuse anyone. They are added by the log statement. Without the parens:
{:company_profile_id ["2"], :topic :company, :url ["mikeshawauto.com"]} field-name: :company_profile_id field-value: ["2"] but I in the final document I only get: "final document: " {:company_profile_id ["2"], :topic :company, :url [" mikeshawauto.com"]} I want: "final document: " {:company_profile_id ["2" "2"], :topic :company, :url [" mikeshawauto.com"]} On Wednesday, October 11, 2017 at 1:42:12 PM UTC-4, lawrence...@gmail.com wrote: > > So I tried this: > > new-field-value (into [] (concat old-field-value > field-value)) > > And I did not get what I expected. Maybe I am sleep deprived, but I don't > see why I can't build up a vector with several values. This is in a map in > an atom. This is the code: > > (swap! documents > (fn [old-documents] > (let [ > document (get old-documents denormalized-id {}) > > _ (errors/log document) > _ (errors/log field-name) > _ (errors/log field-value) > > old-field-value (get old-documents field-name []) > new-field-value (into [] (concat old-field-value > field-value)) > document (assoc document field-name new-field-value) > > _ (errors/log "final document: " document) > new-documents (assoc old-documents denormalized-id > document) > ] > new-documents) > > Those log statements show me this for old-field-value: > > ({:company_profile_id ["2"], :topic :company, :url ["mikeshawauto.com"]}) > > field-name: > (:company_profile_id) > > field-value: > (["2"]) > > but I in the final document I only get: > > ("final document: " {:company_profile_id ["2"], :topic :company, :url [" > mikeshawauto.com"]}) > > I want: > > ("final document: " {:company_profile_id ["2", "2"], :topic :company, :url > ["mikeshawauto.com"]}) > > What am I missing here? > > > > > On Wednesday, October 11, 2017 at 12:28:59 PM UTC-4, lawrence...@gmail.com > wrote: >> >> So I have this: >> >> ({:company_profile_id ["2"], :topic :company, :url ["mikeshawauto.com"]}) >> >> And then I get this field name and value: >> >> (:company_profile_id) >> >> (["2"]) >> >> The next 3 lines of code are: >> >> old-field-value (get old-documents field-name []) >> new-field-value (into old-field-value field-value) >> document (assoc document field-name new-field-value) >> >> And when the function is next called, I end up with : >> >> ({:company_profile_id ["2"], :topic :company, :url ["mikeshawauto.com"]}) >> >> I need: >> >> ({:company_profile_id ["2", "2"], :topic :company, :url [" >> mikeshawauto.com"]}) >> >> So perhaps I've misunderstood what (into) is for? How do I add another >> the values of these 2 vectors together? >> >> >> >> >> >> On Wednesday, October 11, 2017 at 12:20:55 PM UTC-4, >> lawrence...@gmail.com wrote: >>> >>> Using conj instead of into, for no particular reason, except debugging. >>> The document is slowly built-up: >>> >>> ({:company_profile_id [["2"]], :topic :company, :url [["mikeshawauto.com >>> "]]}) >>> >>> ({:company_profile_id [["2"]], :topic :company, :url [["mikeshawauto.com >>> "]]}) >>> >>> ({:company_profile_id [["2"]], :topic :company, :url >>> [["mikeshawauto.com"]], >>> :reference_id [["331089191"]]}) >>> >>> In the transition from row 1 to row 2, I assume the field being added is >>> company_profile_id. Why is there no change? Why isn't a new value added to >>> the vector? I must be missing something obvious. >>> >>> >>> >>> >>> >>> >>> >>> On Wednesday, October 11, 2017 at 11:44:40 AM UTC-4, >>> lawrence...@gmail.com wrote: >>>> >>>> I seem unable to figure out where I made a mistake, though this should >>>> be simple. >>>> >>>> I have two SQL calls that bring back 5 fields: >>>> >>>> SELECT company_profile_id , reference_id, reference_source FROM >>>> company_reference_id limit 1 ; >>>> >>>> +--------------------+--------------+------------------+ >>>> | company_profile_id | reference_id | reference_source | >>>> +--------------------+--------------+------------------+ >>>> | 2 | 331089191 | EIN | >>>> +--------------------+--------------+------------------+ >>>> >>>> SELECT company_profile_id, url FROM company_website >>>> limit 1 ; >>>> >>>> +--------------------+------------------+ >>>> | company_profile_id | url | >>>> +--------------------+------------------+ >>>> | 2 | mikeshawauto.com | >>>> +--------------------+------------------+ >>>> >>>> This brings back a total of 5 values. I need to have a document that >>>> has 5 values, though if values have the same field-name, then I want to >>>> consolidate them into one vector. There are 4 unique field names, so I >>>> expect to end up with 4 vectors, holding 5 values. Instead, I get this: >>>> >>>> ({:company_profile_id ["2"], :topic :company, >>>> :how-many-rows-and-fields-from-database 13, :url ["mikeshawauto.com"], >>>> :reference_id ["331089191"], :reference_source ["ein"]}) >>>> >>>> I expect: >>>> >>>> {:company_profile_id ["2" "2"] >>>> >>>> but I get: >>>> >>>> {:company_profile_id ["2"] >>>> >>>> The documents are combined in a map in an atom, with this function: >>>> >>>> >>>> (def documents (atom {})) >>>> >>>> >>>> (defn update-documents >>>> [denormalized-id field-name field-value >>>> how-many-rows-and-fields-from-database topic] >>>> {:pre [ >>>> (not (nil? denormalized-id)) >>>> (not (nil? field-name)) >>>> (vector? field-value) >>>> ]} >>>> (swap! documents >>>> (fn [old-documents] >>>> (slingshot/try+ >>>> (let [ >>>> document (get old-documents denormalized-id {}) >>>> old-field-value (get old-documents field-name []) >>>> new-field-value (into old-field-value field-value) >>>> document (assoc document field-name new-field-value) >>>> >>>> previous-how-many-rows-and-fields-from-database (get >>>> document :how-many-rows-and-fields-from-database 0) >>>> new-how-many-rows-and-fields-from-database (+ >>>> previous-how-many-rows-and-fields-from-database >>>> how-many-rows-and-fields-from-database) >>>> document (assoc document :topic topic) >>>> document (assoc document >>>> :how-many-rows-and-fields-from-database >>>> new-how-many-rows-and-fields-from-database) >>>> new-documents (assoc old-documents denormalized-id >>>> document) >>>> ] >>>> new-documents) >>>> (catch Object o >>>> (errors/log o) >>>> (slingshot/throw+ { >>>> :type ::update-documents >>>> :error o >>>> } >>>> )))))) >>>> >>>> Can I assume that this always gives me 2 values in a vector? >>>> >>>> old-field-value (get old-documents field-name []) >>>> new-field-value (into old-field-value field-value) >>>> document (assoc document field-name new-field-value) >>>> >>>> I'm going to guess that the bug is somewhere else in my code. But if >>>> anyone sees a flaw in this function, I'd be grateful if you could point it >>>> out to me. >>>> >>>> >>>> >>>> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.