使用编解码器时发现错误

时间:2018-08-02 20:04:19

标签: mongodb-java

我有一个名为Tag的简单对象,该对象具有id,名称和三个数字属性。我也有该对象的编解码器。以下代码执行无误。

MongoDatabase tagsDatabase = 
    usersProcess.getMongoClient().getDatabase(tagsDB)
    .withCodecRegistry(usersProcess.getCodecRegistry());
MongoCollection<Tag> tagsCollection = 
    tagsDatabase.getCollection(tagsCollectionName, Tag.class);
    ArrayList<Tag> tagsList = new ArrayList<Tag>();
FindIterable<Tag> tagsByAlpha = 
    tagsCollection.find().sort(Sorts.ascending("name"));

此后,代码

tagsByAlpha.forEach(new Consumer<Tag>() {
            @Override
            public void accept(Tag t) {
                tagsList.add(t);
            }
        });

在第一行(forEach)处引发异常“ org.bson.BsonInvalidOperationException:仅当ContextType为ARRAY时才可以调用readEndArray,而当ContextType为DOCUMENT时才可以调用”。替代构造

 MongoCursor<Tag> tagsCursor = tagsByAlpha.iterator();

引发相同的异常。似乎暗示find()返回了Documents而不是Tag对象。同时,有效的代码表明我正在尝试的事情是可能的。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

应该使用org.bson.codecs.DoubleCodec