0

使用 Java ……没关系。

有问题,也许这只是一个设计问题。

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

所以我有类似的东西:

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

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

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

我本来希望这fetch()会消耗文档大括号内的所有键:值..但也许这要求太多了。有人知道吗??除了顶层之外,没有办法创建跨文档引用吗?

谢谢

4

1 回答 1

1

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

如果您想找到嵌入的文档,您需要对其进行查询,info._id并且您还需要在其上添加一个索引(为了性能)或者您需要将该嵌入的文档存储在一个集合中并处理嵌入的一份作为副本。在 MongoDB 中复制是可以的……“一个事实一个地方”在这里不适用……前提是您有一些方法可以在主要副本发生更改时更新副本(最终一致性)。

顺便说一句,在 DBRef 上,官方指南说“大多数开发人员仅在集合可以从一个文档更改为下一个文档时才使用 DBRefs。如果您引用的集合始终相同,那么上面概述的手动引用会更有效。”

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

于 2011-08-20T05:00:58.587 回答