覆盖MongoDB的ObjectId的意义

时间:2018-09-28 14:17:13

标签: spring mongodb

我正在进行一个集成,其中我将覆盖_id字段以跟踪会话。我正在使用Spring和Converter接口执行此操作,而不是由MongoDB生成ID,而是在其中放置由客户端发送的UUID。

客户端使用UUID添加引用原始文档的其他数据。当会话开始时,这就是添加到MongoDB中的文档中的内容:

{
    "_id": "a4bbaac0-bae2-4487-9587-609f2263856f",
    "mac": "98:90:96:b6:41:bb",
    "matches": [ ]
}

会话打开时,可能会添加匹配项。一旦添加,它看起来像这样:

{
    "_id": "a4bbaac0-bae2-4487-9587-609f2263856f",
    "mac": "98:90:96:b6:41:bb",
    "receipt": "17131508",
    "matches": ["027a9e1f-c17e-4750-bdd3-291df8cc24fa"]
}

我阅读了最佳做法指南here,旨在实现一对多的关系映射。在指南中,他有一系列引用ObjectId实体的部分。

我的问题很简单,就是按照我的方式做,我不使用ObjectId破坏了MongoDB的任何查询功能吗?

更多技术细节:

我使用mongoTemplate坚持:

mongoTemplate.insert(e.getIn().getBody(Session.class));

我已经注册了执行以下操作的转换器:

@WritingConverter
public class SessionWriteConverter implements Converter<Session, Document> {

    @Override
    public Document convert(Session source) {
        return sessionToDocument.apply(source);
    }

    private Function<Session, Document> sessionToDocument = (source) -> {
        Document document = new Document();
        document.put("_id", source.getId());
        document.put("mac", source.getMac());
        document.put("receipt", source.getReceipt());
        document.put("matches", source.getMatches());
        return document;
    };
}

0 个答案:

没有答案