2017-03-07 11 views
0

私はscalaが新しく、カスタムBsonDocumentを作成しようとしています。私が文書hereを読んでいる限り、内部でputメソッドを呼び出すこのメソッドappend(String key, BsonValue value)があり、私はそれを使用しようとしています。Scala/Java BsonDocumentが正しく動作しません。

2つ以上のフィールドを追加すると、最後の2つだけが追加されるという問題があります。たとえば、私はこのようなコードがある場合:あなたが見ることができるように

The Bson user is { "$set" : { "color" : "teal" }, "$addToSet" : { "accounts" : { "$each" : ["1"] } } } 

、ユーザ名が追加されていない。この場合

var doc = new BsonDocument(); 
val mapAccounts = user.accounts.map(e => new BsonString(e))  
doc.append("$set", new BsonDocument("userName", new BsonString(user.userName))) 
.append("$set", new BsonDocument("color", new BsonString(user.color))) 
.append("$addToSet", new BsonDocument("accounts", new BsonDocument("$each", new BsonArray(mapAccounts.toList.asJava)))) 

println(s"The Bson user is $doc") 

を、私のような出力が得られます。そして、もし私が注文を変更すると、最後の2つの要素が繰り返されます。

私は既にputを直接使用しようとしましたが、同じ結果が得られました。 doc = doc.append(...)のように個別に追加しようとしましたが、依然として同じです。

私はここで何が欠けていますか?

答えて

1

2つを持つことはできません$set(BSONDocumentは基本的にキーと値のマッピングであり、同じキーを再度追加するだけでMap.putと同じようにリセットされます)。何をしたい

はあなたがBsonDocumentMapによって支えられて、両方の値を持つ$setキーを使用する必要が

"$set" : { 
    "color" : "teal", 
    "username": "Jim" 
} 
1

です。

doc.append("$set", new BsonDocument("userName", new BsonString(user.userName)).append("color", new BsonString(user.color))) 
       .append("$addToSet", new BsonDocument("accounts", new BsonDocument("$each", new BsonArray(mapAccounts.toList.asJava)))) 
関連する問題