【问题标题】:How do I make MongoDB call generateIdIfAbsentFromDocument automatically?如何让 MongoDB 自动调用 generateIdIfAbsentFromDocument?
【发布时间】:2015-10-01 13:35:07
【问题描述】:

我有一个CollectibleCodec<Thing>,用于与 MongoDB 数据库进行交互:

public class ThingCodec implements CollectibleCodec<Thing> { /* ... */ }

// ...

MongoCollection<Thing> things = database
    .withCodecRegistry(CodecRegistries.fromCodecs(new ThingCodec()))
    .getCollection("things", Thing.class);

通过此编解码器读取和写入Things 工作正常,但有一个问题:永远不会调用ThingCodec.generateIdIfAbsentFromDocument(Thing) 方法,因此除非我在保存之前设置了ID,否则这些东西会在没有ID 的情况下保存在数据库中.有什么方法可以配置 MongoDB 驱动程序在我插入或更新集合中的项目时自动调用此方法?

【问题讨论】:

  • 你的实现是什么?您没有在此处显示它,但它应该类似于this。如果还有问题,请添加实现。
  • 我的错误。我一定误解了我的同事。我们测试了这个行为,发现我们在generateIdIfabsentFromDocument 中的调试日志没有被调用,但是当我自己尝试这个时,我发现这个方法实际上被调用了。无论如何,感谢您花时间看它!

标签: java mongodb mongodb-java


【解决方案1】:

当然,一种简单的方法是在ThingCodec 本身中进行:

public class ThingCodec implements CollectibleCodec<Thing> {

    @Override
    public void encode(BsonWriter writer, Thing value, EncoderContext context) {
        generateIdIfAbsentFromDocument(value);
        // Do encoding
    }

    // ...
}

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多