Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- How to update / insert a MongoDB sub document with Monger?
- { :owner "fubar@gmail.com" }
- { :owner "fubar@gmail.com" }
- $push
- (ns free-11749-clojure-subdoc.test.core
- (:use [free-11749-clojure-subdoc.core])
- (:use [clojure.test])
- (:require [monger.core :as mg] [monger.collection :as mgcol] [monger.query])
- (:use [monger.operators])
- (:import [org.bson.types ObjectId] [com.mongodb DB WriteConcern]))
- (deftest monger-sub-document
- (mg/connect!)
- (mg/set-db! (mg/get-db "test"))
- (def mycollection "free11749")
- ;; first part
- (mgcol/remove mycollection)
- (is (= 0 (mgcol/count mycollection)))
- (def doc1 {
- :my-criteria-key "my-criteria-value"
- :parent [
- { :child-collection [ "cc0" ] }
- { :child-collection [ "cc1" ] }
- { :child-collection [ "cc2" ] }
- { :child-collection [ "cc3" ] }
- { :child-collection [ "cc4" ] }
- ]
- }
- )
- (mgcol/insert mycollection doc1)
- (is (= 1 (mgcol/count mycollection)))
- (mgcol/update mycollection { :my-criteria-key "my-criteria-value" } { $push { "parent.3.child-collection" "fubar" }} )
- (def mymap1 (first (mgcol/find-maps mycollection { :my-criteria-key "my-criteria-value" })))
- (is (= "fubar" (peek (:child-collection (get (:parent mymap1) 3)))))
- (prn (mgcol/find-maps mycollection { :my-criteria-key "my-criteria-value" }))
- ;; second part
- (mgcol/remove mycollection)
- (is (= 0 (mgcol/count mycollection)))
- (def doc2 {
- :doc-criteria-key "doc-criteria-value"
- :parent [
- { :child { :lastname [ "Alias" ] } }
- { :child { :lastname [ "Smith" ] } }
- { :child { :lastname [ "Jones" ] } }
- ]
- }
- )
- (mgcol/insert mycollection doc2)
- (is (= 1 (mgcol/count mycollection)))
- (mgcol/update mycollection { :doc-criteria-key "doc-criteria-value" "parent.child.lastname" "Smith"} { $push { :parent.$.child.lastname "fubar" } } )
- (def mymap2 (first (mgcol/find-maps mycollection { :doc-criteria-key "doc-criteria-value" })))
- (is (= "fubar" (peek (:lastname (:child (get (:parent mymap2) 1))))))
- (prn (mgcol/find-maps mycollection { :doc-criteria-key "doc-criteria-value" }))
- ;; third part
- (mgcol/remove "fubar")
- (is (= 0 (mgcol/count "fubar")))
- (def doc3 {
- :owner "fubar@gmail.com"
- :content [
- { :content [ "cc0" ] }
- { :content [ "cc1" ] }
- { :content [ "cc2" ] }
- ]
- }
- )
- (mgcol/insert "fubar" doc3)
- (is (= 1 (mgcol/count "fubar")))
- (mgcol/update "fubar" { :owner "fubar@gmail.com" } { $push { "content.1.content" { "fu" "bar" } } } )
- (def mymap3 (first (mgcol/find-maps "fubar" { :owner "fubar@gmail.com" })))
- (is (= { :fu "bar" } (peek (:content (get (:content mymap3) 1)))))
- (prn (mgcol/find-maps "fubar" { :owner "fubar@gmail.com" }))
- )
- Testing free-11749-clojure-subdoc.test.core
- ({:_id #<ObjectId 4fb3e98447281968f7d42cac>, :my-criteria-key "my-criteria-value", :parent [{:child-collection ["cc0"]} {:child-collection ["cc1"]} {:child-collection ["cc2"]} {:child-collection ["cc3" "fubar"]} {:child-collection ["cc4"]}]})
- ({:_id #<ObjectId 4fb3e98447281968f7d42cad>, :doc-criteria-key "doc-criteria-value", :parent [{:child {:lastname ["Alias"]}} {:child {:lastname ["Smith" "fubar"]}} {:child {:lastname ["Jones"]}}]})
- ({:_id #<ObjectId 4fb3e98447281968f7d42cae>, :content [{:content ["cc0"]} {:content ["cc1" {:fu "bar"}]} {:content ["cc2"]}], :owner "fubar@gmail.com"})
- Ran 1 tests containing 9 assertions.
- 0 failures, 0 errors.
Add Comment
Please, Sign In to add comment