Scala / Java BsonDocument追加不正常

时间:2017-03-07 02:26:19

标签: java mongodb scala bson

我是scala的新手,我正在尝试创建自定义BsonDocument。据我在文档here中所述,此方法append(String key, BsonValue value)在内部调用put方法,我正在尝试使用它。

问题是,当我追加两个以上的字段时,只会追加最后两个字段。例如,如果我有这样的代码:

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")

在这种情况下,我得到一个输出:

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

如您所见,未附加userName。如果我改变顺序,它会重复最后两个附加元素。

我已经尝试直接使用put,但仍然得到相同的结果。还试图像doc = doc.append(...)一样单独添加,但仍然相同。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

你不能有两个$set(一个BSONDocument基本上是一个键值映射,再次附加相同的密钥就会重置它,就像Map.put那样。)

你想要的是

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

答案 1 :(得分:1)

由于$setBsonDocument支持,因此您必须使用Map键和两个值。

 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))))