Java MongoDB(或Morphia)条件引用

Java MongoDB(或Morphia)条件引用,java,mongodb,morphia,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

我有一个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):

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

1) 在MongoDB中有没有一种本地方式可以实现这一点?
2) 如果不是1),那么有没有办法在Morphia中处理这个问题(没有一些非常迟钝和冗长的攻击)


谢谢

你天生就是MongoDB,你真倒霉。对于Morphia,您可以使用类似于
@perperpersist
的方法来执行额外的查询,以检查该布尔值。这意味着每次保存C时都会有一个额外的查询,除非您设计了一些快捷方式,只在初始插入时进行查询。检查ID是否为null可能会有所帮助。

也许您应该在C.setTarget()中添加验证。问题是我希望C尽可能成为POJO,我不想在POJO中插入数据存储。谢谢Evan!很高兴听到Morphia自己的首席开发人员说:)很遗憾,检查ID是否为null在这里不够好;在这种情况下,null实际上是一个有效的D(引用可以为null)。但很高兴知道我没有遗漏任何简单的解决方法。另外,如果你不介意的话,我希望你能看看另一个悬而未决的问题,大约一周了:
{
    "target" : { "id": "MY_FANCY_ID" }
    //There is a record with id = "MY_FANCY_ID" in collection D
}