MongoDB的:通过查询@DBRef(MongoDB: query by @DBRef)

2019-07-03 18:50发布

我有一个类层次结构设计为存储用户通知:

@Document
public class Notification<T> {
   @Id
   private String id;
   @DBRef
   private T tag;
   ...
}

@Document
public class NotificationA extends Notification<WrappedA> {
}

@Document
public class NotificationB extends Notification<WrappedB> {
}

    ...

这是返回多态性阵列,让我任何类型的数据存储在“标签”领域是有用的。 这个问题开始时包装的对象包含@DBRef字段:

@Document
public class WrappedA {
   @Id
   private String id;
   @DBRef
   private JetAnotherClass referenced;
   ...
}

在“标签”的领域查询正常工作:

db.NotificationA.find( {"tag.$id": ObjectId("507b9902...32a")} )

但我需要在JetAnotherClass领域(@DBRef领域的两个级别)查询。 我试着点符号,并与子对象,但它返回null:

点符号:

db.NotificationA.findOne( {"tag.$referenced.$id": ObjectId("508a7701...29f")} )

子对象:

db.NotificationA.findOne( {"tag.$referenced": { "_id": ObjectId("508a7701...29f") }} )

任何帮助吗? 提前致谢!

Answer 1:

既然你看起来像你只能通过查询_id我相信你可以这样做:

db.NotificationA.findOne({"tag.$id": ObjectId("blah")});

然而:

但我需要在JetAnotherClass领域(@DBRef领域的两个级别)查询。

是DBREFS不连接,它们仅仅是一个自我描述_id在你不知道的链接集合,它将创建一个辅助对象,所以您不必到这个自己的代码在客户端的事件。

你可以找到更多在这里DBREFS: http://docs.mongodb.org/manual/applications/database-references/

基本上,你可以从同一个文件,即查询DBREF中的子领域: DBRef.$_id ,但你不能,服务器端,解决DBREF和查询上所产生的场。



文章来源: MongoDB: query by @DBRef
标签: mongodb dbref