gpt4 book ai didi

MongoDB:@DBRef 查询

转载 作者:IT老高 更新时间:2023-10-28 13:27:15 24 4
gpt4 key购买 nike

我有一个专为商店用户通知设计的类层次结构:

@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") }} )

有什么帮助吗?提前致谢!

最佳答案

由于您看起来只是通过 _id 进行查询,我相信您可以做到:

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

但是:

But I need to query on the fields of JetAnotherClass (two levels of @DBRef fields).

DBRefs 不是 JOIN,它们只是一个 self 描述的 _id,如果您不知道链接集合,它将创建一个帮助对象,因此您不必自己编写代码客户端。

您可以在此处找到有关 DBRefs 的更多信息:http://docs.mongodb.org/manual/applications/database-references/

基本上,您可以从同一文档查询 DBRef 中的子字段,即:DBRef.$_id,但您不能在服务器端解析该 DBRef 并查询结果字段。

关于MongoDB:@DBRef 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13361278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com