MongoDB - DBRef到DBObject

时间:2011-08-19 22:02:16

标签: mongodb mongo-java dbref

使用Java ......并不重要。

遇到问题,也许只是一个设计问题。

我将“_id”字段分配给我的所有文档,甚至是嵌入的文档。 我有一个父文档(以及那些具有嵌入文档的集合)

所以我有类似的东西:

{ "_id" : "49902cde5162504500b45c2c" , 
  "name" : "MongoDB" , 
  "type" : "database" , 
  "count" : 1 , 
  "info" : { "_id" : "49902cde5162504500b45c2y", 
             "x" : 203 , 
             "y" : 102
           }
}

现在我想要另一个通过DBRef引用我的“信息”的文档,不想要副本。因此,我创建了一个DBRef,它指向父文档的集合,并将_id指定为xxxx5c2y。但是,在fetch()上调用DBRef会给出NULL。

这是否意味着DBReffetch()仅适用于顶级集合条目“_id”字段?

我原本以为fetch()会占用所有键:文档大括号内的值..但可能是要求太多。有人知道吗??除顶层以外,是否无法创建交叉文档引用?

由于

1 个答案:

答案 0 :(得分:1)

是的,您的DBRef _id引用需要是集合中的文档,而不是嵌入文档。

如果要查找嵌入式文档,则需要在info._id上进行查询,并且还需要在其上添加索引(性能)或者您需要存储嵌入式文档集合中的文档并将嵌入的文档视为副本。在MongoDB中复制是正常的......“一个地方的一个地方”在这里不适用...只要你有一些方法可以在主要版本发生变化时更新副本(最终的一致性)。

BTW,在DBRef上,官方指南说“如果集合可以从一个文档更改为下一个文档,大多数开发人员只使用DBRef。如果您引用的集合将始终相同,则上面列出的手动参考更有效。”

另外,为什么要在文档中引用info?如果它是一个数组,我可以理解为什么你可能想要引用单个条目,但由于它在你的例子中似乎不是一个数组,为什么不通过它的_id引用包含文档?