Scala/Java BsonDocument 追加工作不正常

Scala/Java BsonDocument append not working properly

我是 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"] } } }

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

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

我在这里错过了什么?

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

你想要的是

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

您必须将 $set 键与两个值一起使用,因为 BsonDocumentMap 支持。

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