MongoDB(或Morphia)条件引用

时间:2018-08-22 21:24:06

标签: java mongodb morphia

我有一个MongoDB集合C,其模式包含对另一个集合D的手动引用,并且我正在使用Java中的Morphia来管理C和D。D在其模式中具有布尔字段b,我想验证对b的引用(即,将新文档c写入集合C,如果其引用指向D集合中的某个实体d,则如果d的布尔值b为false,则MongoDB应该抛出错误)。

为了更具体地描述,假设您有2个标准的POJO代表MongoDB集合模式:

class C {
    @Id
    public String id;

    @Reference
    public D target; 
}

class D {
    @Id
    public String id;

    public boolean b;
}

基于此架构,示例插入操作如下所示(JSON):

{
    "target" : { "id": "MY_FANCY_ID" }
    //There is a record with id = "MY_FANCY_ID" in collection D
}

在插入带有非空目标(D)的新C时,我想检查一下target.b是否为false,如果是,则抛出数据库错误。

1)是否可以在MongoDB中本地执行此操作?
2)如果不是1),那么有没有办法在Morphia中进行管理(没有一些非常晦涩和冗长的技巧)?

谢谢!

1 个答案:

答案 0 :(得分:1)

对于MongoDB而言,您很不走运。使用Morphia,您可以使用类似@PerPersist的方法来执行额外的查询以检查该布尔值。除非您设计了一些快捷方式以仅在初始插入时执行查询,否则每次保存C都将意味着额外的查询。检查ID是否为null可能在这里有用。