使用Java…这并不重要。
遇到问题,也许只是设计问题。
我将"_id"字段分配给我的所有文档,甚至是嵌入式文档。我有一个父文档(和那些集合),它有一个嵌入的文档
所以我有这样的东西:
{ "_id" : "49902cde5162504500b45c2c" ,
"name" : "MongoDB" ,
"type" : "database" ,
"count" : 1 ,
"info" : { "_id" : "49902cde5162504500b45c2y",
"x" : 203 ,
"y" : 102
}
}
现在我想有另一个文档通过DBRef
引用我的"info",不想要一个副本。因此,我创建了一个指向父文档集合的DBRef
,并将_id指定为xxxx5c2y。然而,在DBRef
上调用fetch()
会得到NULL。
这是否意味着DBRef
和fetch()
只适用于顶级集合条目"_id"字段?
我本来期望fetch()
会使用文档大括号内的所有key:值。但也许这要求太多了。有人知道吗??除了在顶层之外,是否没有办法创建跨文档引用?
谢谢
是的,您的DBRef _id引用需要是您的集合中的文档,而不是嵌入的文档。
如果你想找到嵌入的文档,你需要在info._id
上做一个查询,你也需要在上面添加一个索引(为了性能),或者你需要将嵌入的文档存储在一个集合中,并将嵌入的文档视为副本。复制是OK的MongoDB…"一件事一处"不适用于这里……如果你有办法在主副本改变时更新副本(最终的一致性)。
顺便说一句,关于DBRef,官方指导说"大多数开发人员只在集合可以从一个文档更改到下一个文档时才使用DBRef。"如果引用的集合总是相同的,那么上面列出的手动引用会更有效。"
还有,为什么要在文档中引用info
?如果它是一个数组,我可以理解为什么你可能想要引用个别条目,但因为它似乎不是一个数组在你的例子,为什么不只是引用其_id包含文档?