Clojure の Mongerライブラリを使用して MongeoDB データベースに接続しています。
Mongo データベースでサブドキュメントを更新、挿入、および削除したいと考えています。MongoDB の $push 修飾子を使用すると、検索したドキュメントのルートでこれを行うことができます。しかし、サブコレクションに $push できるようにしたいです。Monger のテストを見ると、それは可能に見えます。しかし、3 番目の親の子コレクションに確実にプッシュできるようにしたいと考えています。モンガーはこのようなことをすることができますか?
(mgcol/update mycollection { :my-criteria-key "my-criteria-value" } { $push { "parent.3.child-collection" "fubar" }} )
さらに良いのは、$push に $where 句を含める機能です。このようなことは可能ですか?
(mgcol/更新 mycollection
{ :doc-criteria-key "doc-criteria-value" }
{ $プッシュ
{ { $where { 親.子.姓: 'スミス' } }
"フバー" } }
)
しかし、基本的なレベルでも、repl で次のコマンドを実行すると、以下のエラーが発生します。
「fubar」データベースは確かに存在します
私は間違いなくDBに接続しています
{ :owner "fubar@gmail.com" }基準は間違いなく有効です。と"content.1.content"私は両方を試しました"content.$.content":
repl => (mc/update "fubar" { :owner "fubar@gmail.com" } { $push { "content.1.content" { "fu" "bar" } } } )
ClassCastException clojure.lang.Var$Unbound は com.mongodb.DB monger.collection/update にキャストできません (collection.clj:310)
交換 =>
交換 =>
repl => (clojure.repl/pst *e)
ClassCastException clojure.lang.Var$Unbound は com.mongodb.DB にキャストできません
monger.collection/update (collection.clj:310)
bkell.run.run-ring/eval2254 (NO_SOURCE_FILE:46)
clojure.lang.Compiler.eval (Compiler.java:6406)
clojure.lang.Compiler.eval (Compiler.java:6372)
clojure.core/eval (core.clj:2745)
clojure.main/repl/read-eval-print--6016 (main.clj:244)
clojure.main/repl/fn--6021 (main.clj:265)
clojure.main/repl (main.clj:265)
user/eval27/acc--3869--auto----30/fn--32 (NO_SOURCE_FILE:1)
java.lang.Thread.run (Thread.java:619)
誰かがこれに遭遇して解決しましたか?
ありがとう