3

Casbah 2.9.2を使用しています

私のmongodbスキーマは次のようになります:

[ _id : "Triangle", Info: [ Color : "Red", Line : "Thin", UseID : "1", SourceId : "2" ] ]

_id、Color、および Line が一緒に一意であるかどうかを最初に確認する更新行を記述できるようにしたいと考えています。これにより、コマンドラインから必要なものが正確に得られます。

db.shapes.update( { _id : 'Triangle', Info : { $not : { $elemMatch : { Color : 'Red', Line : 'Thick' } } } }, { $push : { Info : { Color : 'Red', Line : 'Thick', UseID : '2', SourceId : '3' } } }, true)

私にこのエントリを与える:

[ _id : "Triangle", Info : [ { Color : "Red", Line : "Thin", UseID : "1", SourceId : "2" }, { Color : "Red", Line : "Thick", UseID : "2", SourceId : "3" } ] ]

ただし、Casbah for Scala に変換すると、次のようにはなりません。

shapesCollection.update( { "_id" -> shape, "Info" $not { _ $elemMatch { "Color" -> color, "Line" -> line } } }, { $push -> { "Info" -> { "Color" -> color, "Line" -> line, "UseId" -> useId, "SourceId" -> srcId } } }, true )

最初の苦情 (IntelliJ から) は、すべての ',' を ';' にする必要があるということですが、これは正しくないと感じていますが、デバッグするために義務付けられているため、次のような 2 番目のエラーが表示されます。

「エラー: (java.lang.String, java.lang.String) から利用できる暗黙的なビューがありません => com.mongodb.casbah.query.Imports.DBObject。デフォルト引数を含むアプリケーションでエラーが発生しました。"Info" $not { _ $elemMatch {"

質問は、Casbah のコマンド ラインから実行している更新を実行できますか? もしそうなら、どのように?

ありがとう!

4

1 に答える 1

1

したがって、気になる人にとっては、最初に私の更新文字列が少しずれていました。「色」と「線」が存在しないが「_id」が存在する場合、エラーがスローされます。基本的に、trueは既存の「_id」に追加されないため、upsetterを使用した$ pushのように見えます。そのため、エントリを追加しようとしたときに重複キーエラーが発生していました。しかし、それは議論の余地があります。私がやりたかったことの本当の解決策は、Casbahを使用せず、代わりにMongoDBJavaドライバーを使用することでした。その後、$elemMatchに自分のやりたいことを実行させることができました。

また、これはおそらく私の問題の一部でした。別のルートに行ったため、テストする機会がありませんでした。

「DSLとベアマッチを組み合わせて++を使用する必要があると本当に感じた場合は、->タプルペアの追加サポートを提供します。最初にクエリ演算子を呼び出す必要があります。」

val qMix = ("baz" -> 5) ++ ("foo" $gte 5) ++ ("x" -> "y")
/* error: value ++ is not a member of (java.lang.String, Int)
   val qMix = ("baz" -> 5) ++ ("foo" $gte 5) ++ ("x" -> "y") */

演算子は、DSL演算子(偶然に適切にDBObjectを返す)の結果に対して連鎖しています。

val qMix = ("foo" $gte 5) ++ ("baz" -> 5) ++ ("x" -> "y")
/* qMix: com.mongodb.casbah.commons.Imports.DBObject =
   { "foo" : { "$gte" : 5} , "baz" : 5 , "x" : "y"} */

差出人:http ://api.mongodb.org/scala/casbah/current/tutorial.html

于 2012-11-21T14:22:34.687 に答える