我有一个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中进行管理(没有一些非常晦涩和冗长的技巧)?
谢谢!
答案 0 :(得分:1)
对于MongoDB而言,您很不走运。使用Morphia,您可以使用类似@PerPersist
的方法来执行额外的查询以检查该布尔值。除非您设计了一些快捷方式以仅在初始插入时执行查询,否则每次保存C都将意味着额外的查询。检查ID是否为null可能在这里有用。