java - MongoDB Java 驱动程序返回带引号的字符串
问题描述
我正在使用 MongoDB 在 Java 上开发一个应用程序来实现持久性。
我们有以下 POJO:
private class DocumentType{
private ObjectId oid;
private String shortName;
private String printingName;
private String description;
//Tax Code is a list of 3-digit numeric codes (must match pattern \\d{3}).
private List<String> taxCodes;
}
我们为这个类创建了一个自定义 CODEC,它简单地执行以下编码:
writer.writeObjectId("_id", value.getOid());
//... writes every property value, if value is null invokes writer.writeNull("property")
wrirter.writeName("taxCodes");
writer.writeStartArray();
taxCodes.forEach(writer::writeString);
writer.writeEndArray();
并且在解码时,在检查 reader BsonType 和 name 后,调用reader.readString
.
一切正常,插入大量测试值后,可以验证 MongoShell 中的结果,并且符合预期,taxCodes 显示正确(即:“taxCodes”:[“001”,“003”,“145”, “325”])。
然后,在查询集合时,解码实现执行以下操作:
//some funny stuff to make sure the reader state is not end of document.
//some funny stuff to know which field name we are reading.
//if readName result is taxCodes, we must read the array of tax codes:
reader.readStartArray();
while(reader.readBsonType() == BsonType.STRING)
item.getTaxCodes().add(reader.readString());
reader.readEndArray();
//funny stuff to read other fields...
预期的结果是现在 taxCodes 将包含字符串值,这样调用taxCodes.forEach(System.out::printLn);
应该会产生输出:
001
003
145
325
但它没有,它导致输出:
"001"
"003"
"145"
"325"
这不是我的 IDE 或系统控制台的问题,我准备了一个 UnitTest,如果我手动设置它们并且工作正常,它会打印 taxCodes。所以,我的问题是 reader.readString 不返回 001,而是返回“001”,但为什么呢?它只发生在该字段中,为什么不发生在名称字段或描述字段中?你会怎么做才能解决这个问题?我的测试mongodb服务器版本是4.4.0,我的驱动依赖是:
<!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-reactivestreams -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-reactivestreams</artifactId>
<version>4.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-core -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>4.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams -->
<dependency>
<groupId>org.reactivestreams</groupId>
<artifactId>reactive-streams</artifactId>
<version>1.0.3</version>
</dependency>
谢谢。
解决方案
推荐阅读
- javascript - 反应JS。火力基地。TypeError:无法读取未定义的属性“setState”
- spring-boot - Spring REST Docs - 避免记录链接
- php - AWS Elastic Beanstalk Laravel 禁止获取文件
- python - 为keras w tensorflow后端重塑张量的正确方法
- ssl - 如何在谷歌云上配置启用 ssl 的 Apache NIFI 以连接 https 负载均衡器运行状况检查
- sql-server - 快速将 SSRS 报告导出到 csv
- sql - 在 SQL Server 中,具有非常大列表的 IN 运算符太慢。我应该改用什么?
- c# - 未从数据库恢复多对一集合
- css - Bootstrap 4 工具提示箭头阴影样式
- excel - 根据相邻单元格中的值填充单元格