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
键与两个值一起使用,因为 BsonDocument
由 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))))
我是 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
键与两个值一起使用,因为 BsonDocument
由 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))))